Huomasin äskettäin, että ympäristömuuttujien asettamiseen on 3 vaihtoehtoa:
-
export envVar1=1
-
setenv envVar2=2
-
env envVAr3=3
Jos on muita tapoja, valaise meitä.
Milloin minun pitäisi pitää toista parempana? Ehdota ohjeita.
Mitä tulee kuorien yhteensopivuuteen, mikä on laajin (kattaa useampia shell-murteita)?
Huomasin jo tämän vastaus , mutta haluan laajentaa kysymystä env
ja käyttöasetusten ohjeilla.
Vastaa
export VARIABLE_NAME="some value"
on tapa asettaa ympäristömuuttuja mihin tahansa POSIX-yhteensopivaan kuoreen (sh
, dash
, bash
, ksh
jne .; myös zsh). Jos muuttujalla on jo arvo, voit tehdä siitä export VARIABLE_NAME
tehdäksesi siitä ympäristömuuttujan muuttamatta arvoa.
Pre-POSIX Bourne-kuoret eivät tue tätä, minkä vuoksi näet komentosarjoja, jotka välttävät export VARIABLE_NAME="some value"
ja käyttävät VARIABLE_NAME="some value"; export VARIABLE_NAME
. Mutta POSIXia edeltävät Bourne-kuoret ovat nykyään erittäin harvinaisia.
setenv VARIABLE_NAME="some value"
on csh-syntaksi ympäristömuuttujan asettamiseksi. setenv
ei ole olemassa sh: ssä, ja csh: tä käytetään erittäin harvoin skripteissä, ja bash on ylittänyt sen vuorovaikutteisessa käytössä viimeisten 20 vuoden ajan (ja zsh vielä pidempäänkin), joten voit unohtaa sen, ellei kohtaat sen.
env
-komento on hyvin harvoin hyödyllinen paitsi shebang-rivillä . Kun sitä kutsutaan ilman argumentteja, se näyttää ympäristön, mutta export
tekee sen paremmin (lajiteltu ja usein lainattu disambigualle) arvot uudelle riville, jotka erottavat arvot). Kun se kutsutaan argumenteilla, se suorittaa komennon, jossa on ylimääräisiä ympäristömuuttujia, mutta sama komento ilman env
toimii myös (VAR=value mycommand
ajaa mycommand
VAR
-asetuksena on value
, kuten env VAR=value mycommand
). Syy env
on hyödyllinen shebang-rivillä, että se suorittaa haun PATH
, eikä se tee mitään muuta, kun se kutsutaan komennolla nimi. env
-komennosta voi olla hyötyä, kun komento suoritetaan vain muutamalla ympäristömuuttujalla -i
tai ilman parametreja muuttujia sisältävän ympäristön näyttämiseksi. virheellisillä nimillä, joita komentotulkki ei tuota.
Vastaa
Muuttujan kuten VAR="asdf"
jättää ympäristön muokkaamattomaksi, mikä tarkoittaa, että samassa istunnossa käynnistämäsi ohjelmat eivät tiedä mitään VAR
: stä eivätkä pysty käyttämään sitä. Haluat tämän käyttäytyä kirjoittaessasi komentosarjoja .
export
on toisaalta sisäänrakennettu sisäänrakennus, joka muokkaa ympäristöä, jolloin viety muuttuja näkyy näkyvissä nykyisessä istunnossa syntyneille aliprosesseille. voi saavuttaa saman suorittamalla VAR="asdf" %program_name%
.
env
ei ole sisäänrakennettu, vaan itse ohjelma. pinta se toimii aivan kuten VAR="asdf" %program_name%
, mutta alemmalla tasolla asiat muuttuvat hieman monimutkaisemmiksi. Ensinnäkin env
käynnistetään. Se muokkaa ympäristöä ja suorittaa komennon annetuilla argumenteilla. Sama käyttäytyminen, jonka voit saavuttaa omassa koodissasi käyttämällä exec (3) -järjestelmäkutsua.
setenv
on vain export
csh-perheen kuorissa, kuten vastauksessasi mainitaan.
Kommentit
Vastaa
Tähän vastaavilla kysymyksillä on useita kysymyksiä:
bash setenv -komentoa ei löydy
(jne.)
VAR=asdf
päivittää ympäristön, josVAR
oli jo ympäristössä. (Tämä ei ollut ' t totta alkuperäisessä Bourne-kuoressa.)