Kuinka viedä asetetut muuttujat kerralla?

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

  • mitä tarkoitat viennistä kaikki kerralla? voit käyttää puolipisteitä määritelläksesi yhdellä rivillä … kuten a = 123; b = " asd asd "; c = " hei maailma "
  • Hyvin samanlainen kuin unix.stackexchange .com / q / 79064/4667
  • set näyttää myös toiminnot ja järjestelmämuuttujat, kuten BASH_VERSION
  • Kysymyksesi on epäselvä . Onko tämä ote set -lähetyksestä, jonka ' näytät? Jos on, niin se ' ei ole bash ' s. Haluatko viedä kaikki tällä hetkellä asetetut muuttujat, mukaan lukien erityiset shell-muuttujat? Tai vain ne 3 muuttujaa, kuten export a b c?
  • export ${!T*} vievät minkä tahansa määritetyn parametrin, jonka nimi alkaa T. Valitettavasti ' ei näytä olevan tapa luoda helposti luettelo kaikista määritetyistä parametreista.

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}")` 
  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

  2. 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

  3. 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ä.

Vastaa

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