set
-komento näyttää kaikki paikalliset muuttujat kuten alla. Kuinka voin viedä nämä muuttujat kerralla?
>set a=123 b="asd asd" c="hello world"
Kommentit
Vastaa
Suorita seuraava komento ennen muuttujien asettamista:
set -a
man sivu:
-a
Kun tämä vaihtoehto on käytössä, vientimääritelmä asetetaan kullekin muuttuja, jolle määritys suoritetaan;
Voit poistaa tämän vaihtoehdon käytöstä suorittamalla set +a
jälkikäteen.
Esimerkki:
set -a . ./environment set +a
Missä environment
sisältää:
FOO=BAR BAS="quote when using spaces"
Kommentit
- Tämän on oltava käytössä ennen muuttujille osoittamista. Se ei ' t tee mitään aiemmin määritetyille muuttujille.
- @chepner, kiitos, unohdin mainita sen!
- Tämä myös automaattisesti vie toiminnot samalla tavalla kuin
function example(){ echo good; }; export -f example
vastaus
Tämä toimii, jos komentotulkkisi on bash (mahdollisesti myös muut komentotulkit).
export > /my/env/var/file
uusi tiedosto sisältää dumpin kaikista nykyisistä muuttujista … tykkää
declare -x PORT="9000" declare -x PORT_ADMIN="3001" declare -x PORT_DOCKER_REGISTRY="5000" declare -x PORT_ENDUSER="3000" declare -x PRE_BUILD_DIR="/cryptdata6/var/log/tmp/khufu01/loud_deploy/curr/loud-build/hygge" declare -x PROJECT_ID="hygge" declare -x PROJECT_ID_BUSHIDO="bushido"
sitten nykyisen kuoren liittämiseksi kaikkiin näihin env vars -ongelmiin
source /my/env/var/file
vastaus
`echo "export" $((set -o posix ; set)|awk -F "=" "BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}")`
-
Hanki ensin kaikki asetetut ympäristömuuttujat:
(set -o posix ; set)
Viite: https://superuser.com/questions/420295/how-do-i-see-a-list-of-all-currently-defined-environment-variables-in-a-linux-ba -
Hanki kaikki ympäristömuuttujien nimet, erotettu välilyönnillä:
awk -F "=" "BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}"
Viite: awk – Sarakkeen arvo e ilman uutta riviä ja lisäämällä pilkku ja https://stackoverflow.com/questions/14212993/regular-expression-to-match-a-pattern-inside-awk-command -
Meidän on nyt vietävä nämä muuttujat, mutta xargs ei voi tehdä tätä, koska se haarauttaa aliprosessin, vienti on suoritettava nykyisessä prosessissa.
echo "export" ...
luo haluamasi komento ja suorita se sitten ”. Kaikki tämä: s.
Kommentit
- Welcomme U: lle & L SE. Ehkä voit muokata viestiäsi ja antaa selitystä.
- Ei ole oikein olettaa, että ympäristömuuttujien nimet koostuvat pelkästään ats: sta. ja AZ. Ne sisältävät tavallisesti myös alaviivoja ja numeroita, joten kuvio olisi
[a-zA-Z_][a-zA-Z0-9_]*
. Tähän on joitain muunnelmia, jotka perustuvat kuoreen, jonka ' käyttää uudelleen, mutta tämä on turvallinen / kannettava lähestymistapa. - Hyvä asia @ChrisJohnson – päivitetty!
Vastaa
Voit ennakoida export
muuttujan nimelle awk
ja saatu tulos:
eval $(printenv | awk -F= "{ print "export " $1 }")
Kommentit
-
printenv
tulostaa jo vietyjä muuttujia. Se voitti myös ' t -työntekijän jos on muuttujia, jotka sisältävät uuden rivin merkkejä.
set
näyttää myös toiminnot ja järjestelmämuuttujat, kuten BASH_VERSIONset
-lähetyksestä, jonka ' näytät? Jos on, niin se ' ei olebash
' s. Haluatko viedä kaikki tällä hetkellä asetetut muuttujat, mukaan lukien erityiset shell-muuttujat? Tai vain ne 3 muuttujaa, kutenexport a b c
?export ${!T*}
vievät minkä tahansa määritetyn parametrin, jonka nimi alkaaT
. Valitettavasti ' ei näytä olevan tapa luoda helposti luettelo kaikista määritetyistä parametreista.