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
.
taisource
, 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
.
taisource
. 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
sanoosudo: 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 komentojasudo
. Ehdotan, että yrität hankkia komentosarjan ja suorittaa sittensudo
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.