Bagaimana cara mengekspor variabel yang ditetapkan, sekaligus?

39

setperintah menampilkan semua variabel lokal seperti di bawah ini. Bagaimana cara mengekspor variabel-variabel ini sekaligus?

>set
a=123
b="asd asd"
c="hello world"
Neerav
sumber
apa maksudmu ekspor sekaligus? Anda dapat menggunakan titik koma untuk mendefinisikan dalam satu baris ... seperti a = 123; b = "asd asd"; c = "hello world"
Raza
Sangat mirip dengan unix.stackexchange.com/q/79064/4667
glenn jackman
2
setjuga menampilkan fungsi dan variabel sistem seperti BASH_VERSION
glenn jackman
Pertanyaan Anda tidak jelas. Apakah itu kutipan setoutput yang Anda tampilkan? Jika demikian, maka itu bukan bashmiliknya. Apakah Anda ingin mengekspor semua variabel yang saat ini ditetapkan termasuk variabel shell khusus? Atau hanya 3 variabel yang suka di export a b c?
Stéphane Chazelas
export ${!T*}akan mengekspor parameter yang ditentukan yang namanya dimulai dengan T. Sayangnya, sepertinya tidak ada cara untuk dengan mudah menghasilkan daftar semua parameter yang ditentukan.
chepner

Jawaban:

72

Jalankan perintah berikut, sebelum mengatur variabel:

set -a 

halaman manual:

-a
Ketika opsi ini aktif, atribut ekspor harus ditetapkan untuk setiap variabel yang melakukan tugas;

Untuk mematikan opsi ini, jalankan set +asesudahnya.

Contoh:

set -a
. ./environment
set +a

Dimana environmentberisi:

FOO=BAR
BAS='quote when using spaces'
nitin
sumber
13
Ini harus diaktifkan sebelum menetapkan ke variabel. Itu tidak melakukan apa pun untuk variabel yang ditugaskan sebelumnya.
chepner
1
@ chepner, Terima kasih saya lupa menyebutkan itu !!
nitin
Ini juga secara otomatis mengekspor fungsi dengan cara yang sama sepertifunction 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. Pertama, dapatkan semua variabel lingkungan yang ditetapkan: (set -o posix ; set) Referensi: https://superuser.com/questions/420295/how-do-i-see-a-list-of-all-currently-defined-environment-variables-in-a- linux-ba

  2. Dapatkan semua nama variabel lingkungan, dipisahkan oleh spasi: awk -F "=" 'BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}' Referensi: awk-Mencetak nilai kolom tanpa baris baru dan menambahkan koma dan https://stackoverflow.com/questions/14212993/ Regular-expression-to-match-a-pattern-inside- perintah awk

  3. Sekarang, kita perlu mengekspor variabel-variabel ini, tetapi xargs tidak dapat melakukan ini karena itu mem-proses proses anak, ekspor harus dijalankan dalam proses saat ini. echo "export" ...buat perintah yang kita inginkan, lalu gunakan `` untuk menjalankannya. Itu saja: hlm.

Beruang Huang
sumber
Selamat datang di U&L SE. Mungkin Anda dapat mengedit posting Anda dan memberikan beberapa penjelasan.
Archemar
1
Tidak benar untuk menganggap nama variabel lingkungan hanya akan terdiri dari az dan AZ. Mereka biasanya menyertakan garis bawah dan angka juga, jadi polanya [a-zA-Z_][a-zA-Z0-9_]*. Ada beberapa variasi pada ini berdasarkan pada shell yang Anda gunakan, tetapi ini adalah pendekatan yang aman / portabel.
Chris Johnson
Poin bagus @ ChrisJohnson - diperbarui!
Wil Moore III
3

Anda dapat menambahkan exportke nama variabel melalui awkdan evaloutput yang dihasilkan:

eval $(printenv | awk -F= '{ print "export " $1 }')
Wil Moore III
sumber
2
printenvmencetak variabel yang sudah diekspor. Itu juga tidak akan berfungsi dengan baik jika ada variabel yang berisi karakter baris baru.
Stéphane Chazelas
2

Ini berfungsi jika shell Anda adalah bash (mungkin juga shell lain)

export > /my/env/var/file

file baru Anda akan berisi dump semua variabel yang saat ini didefinisikan ... dengan entri seperti

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"

kemudian untuk mendongkrak shell saat ini dengan semua masalah yang terkait

source  /my/env/var/file
Scott Stensland
sumber