Mitä eroa on env-, setenv-, export- ja milloin käyttää?

Huomasin äskettäin, että ympäristömuuttujien asettamiseen on 3 vaihtoehtoa:

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

  • Nykyaikaisissa kuorissa VAR=asdf päivittää ympäristön, jos VAR oli jo ympäristössä. (Tämä ei ollut ' t totta alkuperäisessä Bourne-kuoressa.)

Vastaa

bash setenv -komentoa ei löydy

  • Mikä ' erottaa " export " ja " setenv "?

  • (jne.)

    Vastaa

    Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *