Nemrégiben azt vettem észre, hogy 3 lehetőségünk van a környezeti változók beállítására:
-
export envVar1=1
-
setenv envVar2=2
-
env envVAr3=3
Ha vannak más módszerek, kérjük, világosítson fel minket.
Mikor részesítsem előnyben egyiket a másikkal szemben? Kérjük, javasoljon irányelveket.
A shell kompatibilitást illetően melyik a legterjedelmesebb (több shell dialektust takar)?
Ezt már észrevettem válasz , de szeretném kibővíteni a kérdést az env
és a használati preferenciák irányelveivel.
Válasz
export VARIABLE_NAME="some value"
a környezeti változó beállításának módja bármely POSIX-kompatibilis shellben (sh
, dash
, bash
, ksh
stb .; szintén zsh). Ha a változónak már van értéke, akkor a export VARIABLE_NAME
használatával környezeti változóvá teheti az érték megváltoztatása nélkül.
Pre-POSIX Bourne-héjak nem támogatták ezt, ezért olyan szkripteket fog látni, amelyek elkerülik a export VARIABLE_NAME="some value"
alkalmazást, és a VARIABLE_NAME="some value"; export VARIABLE_NAME
helyett. De a POSIX előtti Bourne-héjak manapság rendkívül ritkák.
setenv VARIABLE_NAME="some value"
a csh szintaxisa a környezeti változó beállításához. nem létezik az sh fájlban, és a csh-t rendkívül ritkán használják szkriptekben, és a bash interaktív használatra az elmúlt 20 évben (és a zsh-nél hosszabb ideig is) felülmúlta, így megfeledkezhet róla, hacsak találkozik vele.
A env
parancs nagyon ritkán hasznos, kivéve a shebang sorokat . Argumentumok nélküli meghíváskor megjeleníti a környezetet, de export
jobban (rendezve, és gyakran idézve disambigua-ra) új sorok az értékeket elválasztó új sorokból). Ha argumentumokkal hívják meg, akkor futtat egy parancsot külön környezeti változókkal, de ugyanaz a parancs, amely env
nélkül működik, működik (VAR=value mycommand
futtatja a mycommand
VAR
value
értékre állítva, akárcsak env VAR=value mycommand
). Az env
oka a shebang sorban hasznos, hogy PATH
keresést hajt végre, és előfordul, hogy egy paranccsal meghívva nem csinál mást. név. A env
parancs hasznos lehet egy parancs futtatásához, csak néhány környezeti változóval, -i
, vagy paraméterek nélkül a környezet, beleértve a változókat is, megjelenítésére. érvénytelen nevekkel, amelyeket a héj nem importál.
Válasz
Olyan változó beállítása, mint VAR="asdf"
változatlanul hagyja a környezetet, ami azt jelenti, hogy az ugyanazon munkamenetben elindított programok nem tudnak semmit a VAR
-ről, és nem lesznek képesek hozzáférni hozzá. Ezt a viselkedést akarja használni, ha shell-szkripteket ír .
export
viszont egy alap beépítettség, amely módosítja a környezetet, így láthatóvá teszi az exportált változót az aktuális munkamenet során keletkezett gyermekfolyamatok számára. elérheti ugyanezt a VAR="asdf" %program_name%
futtatásával.
env
nem beépített, hanem önmagában egy program. a felület pontosan úgy működik, mint amikor VAR="asdf" %program_name%
, de az alsó szinten a dolgok kissé bonyolultabbá válnak. Először elindul a env
. Módosítja a környezetet, majd végrehajtja a parancsot megadott argumentumokkal. Ugyanezt a viselkedést érheti el a saját kódjában is a exec (3) rendszerhívás használatával.
setenv
csak export
a csh-család kagylóiban, amint az a válaszában szerepel.
Megjegyzések
Válasz
Számos kérdés válaszol erre a kérdésre:
-
iv Különbség az exportált és a bash-ban nem szereplő shell változók között
-
iv Mi a különbség a shell változók és a környezeti változók közötti használatban?
(stb.)
VAR=asdf
frissíti a környezetet, haVAR
már volt a környezetben. (Ez nem volt igaz az eredeti Bourne-shellben ' t.)