Minulla on useita Amazon EC2 -tilejä ja haluan pystyä vaihtamaan muuttujia, kuten $EC2_HOME, nopeasti komentosarja.

Minulla on shell-komentosarja määritetty näin:

#!/bin/sh export EC2_HOME=/home/me/.ec2 echo $EC2_HOME 

Kun suoritan komentosarjaa, tiedän, että EC2_HOME on asetettu, mutta ajattelin, että export -toiminnon käyttäminen saisi muuttujan tarttumaan komentosarjan valmistuttua. Se ei ole, koska echo $EC_HOME -sovelluksen suorittaminen ei näytä mitään.

Tiedän, että tämän täytyy olla hyvin alkeellista Linux-komentosarjatietoa, mutta en tiedä sitä. yritin etsiä aiheeseen liittyviä kysymyksiä ilman onnea – joten pyydän anteeksi, jos tämä on kaksoiskappale.

Vastaa

Sinun tulee hankkia komentosarjasi, kanssa

. ./script 

tai

source ./script 

kommentteja

  • syy on se, että komentosarjasi synnyttää uuden kuoriprosessin nykyisen kuoren lapsena. Aliprosessissa tekemäsi ympäristömuutokset eivät voi vaikuttaa vanhempaan. Kun käytät . tai source, et kutu uutta aliprosessia, vaan suoritat komentoja nykyisessä kuoressa.
  • @glennjackman Minulla on samanlainen ongelma ja olen kokeillut ratkaisuasi, mutta se kirjaa minut pois kuoresta, kun teen . tai source. Miksi tämä on onnea pening?
  • @Patryk: Ehkä skriptilläsi on exit -lauseke, joten se ei sovi hankittavaksi.
  • Vaikka source ./script toimii täysin hyvin, sudo source ./script.sh sanoo sudo: source: command not found. Kuinka voin tehdä tämän sudolla?
  • @ 71GA: sudo: n kokoamisasetuksista ja /etc/sudoers Voit tai ei voi säilyttää ympäristöäsi, kun suoritat komentoja sudo. Ehdotan, että yrität hankkia komentosarjan ja suorittaa sitten sudo vaihtoehdolla -E ympäristön suojelemiseksi. Jos se ei toimi, oletan, että voit tehdä hyvin vähän.

Vastaa

Kun suoritat skripti se saa oman kuoren ja oman ympäristönsä, jotka katoavat uudestaan heti kun komento on valmis. Ympäristömuuttujien pitämiseksi lähde komentosarja nykyiseen komentotulkkiin:

$ source ./a.sh 

tai vastaavasti (mutta hieman kannettavammin) käytä POSIX-pistekomento :

$ . ./a.sh 

Sitten määritelmät lisätään nykyiseen shell-ympäristöön ja peritään minkä tahansa siitä käynnistämäsi ohjelman kautta.

Lähemmäksi komentosarjan suorittamista . a.sh löytää a.sh hakemalla hakemistoja hakemistosta PATH ympäristömuuttuja.


Näiden käyttäytymisessä on joitain hienovaraisuuksia ja onko . ja source ovat samat (tai ovat lainkaan läsnä). . ./a.sh käyttäytyy ehdottomasti samalla tavalla jokaisessa POSIX-yhteensopivassa kuoressa, mutta source ja . ja . a.sh ja . ./a.sh, voivat vaihdella . Bashille source ja . ovat samat kaikissa tapauksissa; kohteelle zsh source tarkistaa aina ensin nykyisen hakemiston ; ksh on olennaisesti samanlainen.

Jos komentosarjan nimi annetaan poluksi (joka sisältää /), sitä polkua käytetään suoraan kaikissa tapauksissa. Kannettavasti luotettavin asia on . ./script tai . /path/to/script.

Vastaus

Vain tallennettavaksi.

Jos haluat suorittaa komentosarjan Internetistä, joka vie env: n järjestelmään

voit käyttää seuraavaa muotoa

source <(curl -s -L https://raw.githubusercontent.com/iamwwc/wwcdocker/master/install.sh) 

Esimerkiksi:

source <(curl -s -L https://example.com/install.sh) 

kommentit

  • Näyttää vaaralliselta, mutta hyödylliseltä, jos luotat kyseiseen komentosarjaan!

Vastaa

Yritä

exec ./script 

Exec-komento suorittaa komentosarjan nykyisessä kuoressa käynnistämättä ei-vuorovaikutteista komentotulkkia.

Vastaa

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