Bir seferde ayarlanan değişkenler nasıl dışa aktarılır?


39

setkomutu aşağıdaki gibi tüm yerel değişkenleri görüntüler. Bu değişkenleri bir kerede nasıl dışa aktarırım?

>set
a=123
b="asd asd"
c="hello world"

tek seferde ihracat yapmak ne demek? bir satırda tanımlamak için noktalı virgül kullanabilirsiniz ... a = 123; b = "asd asd"; c = "merhaba dünya"
Raza


2
setayrıca BASH_VERSION
glenn jackman

Sorunuz net değil. Bu, gösterdiğiniz bir setçıktı mı? Eğer öyleyse, o zaman değil bash. Özel kabuk değişkenleri dahil olmak üzere, ayarlanmış tüm değişkeni dışa aktarmak ister misiniz? Veya sadece bu gibi 3 değişken export a b c?
Stéphane Chazelas

export ${!T*}adı ile başlayan herhangi bir tanımlanmış parametreyi verecekti T. Ne yazık ki, tanımlanmış tüm parametrelerin listesini kolayca oluşturmanın bir yolu yok gibi görünüyor .
chepner

Yanıtlar:


72

Değişkenleri ayarlamadan önce aşağıdaki komutu çalıştırın:

set -a 

man sayfa:

-a
Bu seçenek açıkken, dışa aktarma özelliği, bir ödevin yapıldığı her değişken için ayarlanacaktır;

Bu seçeneği kapatmak için set +asonra çalıştırın .

Örnek:

set -a
. ./environment
set +a

Nerede environmentiçerir:

FOO=BAR
BAS='quote when using spaces'

13
Yine de değişkenlere atanmadan önce bu etkin olmalıdır. Önceden atanmış değişkenlere hiçbir şey yapmaz.
chepner

1
@chepner, Teşekkürler ben bunu söylemeyi unuttum!
nitin

Bu aynı zamanda fonksiyonları otomatik olarak aynı şekilde verirfunction example(){ echo good; }; export -f example
Oliver I

5
`echo "export" $((set -o posix ; set)|awk -F "=" 'BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}')`
  1. İlk olarak, ayarlanmış tüm ortam değişkenlerini alın: (set -o posix ; set) Referans: https://superuser.com/questions/420295/how-do-i-see-a-list-of-all-currently-defined-environment-variables-in-a- linux-ba

  2. Tüm ortam değişkeni adlarını boşlukla ayırarak alın: awk -F "=" 'BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}' Referans: awk-Yeni satır olmadan sütun değerini yazdırma ve virgül ve https://stackoverflow.com/questions/14212993/regular-expression-to-match-a-pattern-inside- awk-komuta

  3. Şimdi, bu değişkenleri dışa aktarmamız gerekiyor, ancak xargs bunu yapamaz çünkü alt süreci zorlar, dışa aktarma işleminin geçerli işlem altında yapılması gerekir. echo "export" ...İstediğimiz bir komut oluşturun, sonra çalıştırmak için `` kullanın. Hepsi bu kadar: s.


U & L SE'ye hoş geldiniz. Belki yayınınızı düzenleyebilir ve açıklama yapabilirsiniz.
Archemar

1
Ortam değişkeni adlarının yalnızca az ve AZ'den oluşacağını varsaymak doğru değildir. Yaygın olarak alt çizgi ve rakam da içerirler [a-zA-Z_][a-zA-Z0-9_]*; Kullanmakta olduğunuz kabuğa göre bazı değişiklikler olabilir, ancak bu güvenli / taşınabilir bir yaklaşımdır.
Chris Johnson

İyi nokta @ ChrisJohnson - güncellendi!
Wil Moore III

3

Sen başa ekleyebilir exportaracılığıyla değişken adına awkve evalelde edilen çıkış:

eval $(printenv | awk -F= '{ print "export " $1 }')

2
printenvZaten verilen değişkenleri yazdırır. Yeni satır karakterleri içeren değişkenler varsa, bu da düzgün çalışmaz.
Stéphane Chazelas

2

Bu, kabuğunuzun keskin olması durumunda işe yarar (muhtemelen diğer kabukları da vardır)

export > /my/env/var/file

Yeni dosyanız şu anda tanımlanmış tüm değişkenlerin bir dökümünü içerecek ...

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"

o zaman tüm bu env vars sorunu ile mevcut kabuğu kaldırmak

source  /my/env/var/file
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.