variabel yang diekspor tidak bertahan setelah eksekusi skrip


8

Saya menghadapi masalah aneh. Saya sudah vm dengan solaris 11, dan mencoba menulis beberapa skrip bash.

jika, pada shell, saya ketik:

export TEST=aaa

dan kemudian jalankan:

set

Saya benar melihat variabel lingkungan baru bernama TEST yang nilainya aaa. Namun, jika pada dasarnya saya melakukan hal yang sama dalam sebuah skrip. ketika skrip berakhir, saya tidak melihat set variabel. Untuk membuat contoh nyata, jika dalam file test.sh saya punya:

#!/usr/bin/bash
echo 1: $TEST   #variable not defined yet, expect to print only 1:
echo 2: $USER
TEST=sss
echo 3:  $TEST
export TEST
echo 4:  $TEST

itu mencetak:

1:
2: daniele
3: sss
4: sss

dan setelah eksekusi, TEST tidak diatur dalam shell. Apakah saya melewatkan sesuatu? Saya mencoba keduanya untuk melakukan ekspor TEST = sss dan set variabel / ekspor terpisah tanpa perbedaan.

Jawaban:


15

ekspor - buat variabel tersedia untuk proses anak, tetapi tidak untuk orang tua.

skrip source - run di shell tanpa membuat proses anak

Untuk exalmpe, variabel persisten dapat diwujudkan dengan menulis ke file

#!/usr/bin/bash
echo 1: $TEST   #variable not defined yet, expect to print only 1:
CONFIGFILE=~/test-persistent.vars
if [ -r ${CONFIGFILE} ]; then
  # Read the configfile if it's existing and readable
  source ${CONFIGFILE}
fi
echo 2: $TEST
echo 3: $USER
TEST=sss
echo 4:  $TEST
echo TEST="$TEST"> ${CONFIGFILE}
echo 5:  $TEST

Ini juga bukan apa yang ingin saya capai, tapi saya mengerti maksud Anda. Terima kasih.
Daniele

5

Untuk membuat variabel Anda terlihat, Anda perlu sourceskrip yang mengekspor variabel Anda. Lihat man source.


1
kemungkinan tidak ada halaman sumber, dan Anda ingin help sourcedi bash sebagai gantinya.
rebus

ini berfungsi jika saya secara langsung memanggil skrip, (yaitu jika saya sumber skrip dengan ekspor dari shell), tetapi tampaknya tidak berfungsi jika saya sumber skrip dari dalam skrip lain.
Daniele
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.