Mi a különbség az env, setenv, export és mikor kell használni?

Nemrégiben azt vettem észre, hogy 3 lehetőségünk van a környezeti változók beállítására:

  1. export envVar1=1
  2. setenv envVar2=2
  3. 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

  • A modern héjakban a VAR=asdf frissíti a környezetet, ha VAR már volt a környezetben. (Ez nem volt igaz az eredeti Bourne-shellben ' t.)

Válasz

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük