Variabel lingkungan tidak dapat diakses dalam skrip bash

22

Saya mengalami masalah aneh. Saya memasukkan beberapa variabel env .bashrcdan berfungsi sebagaimana mestinya:

echo $HADOOP_HOME
/home/me/dist/hadoop

Tetapi variabel env tidak dapat diakses saat menjalankan skrip bash. Misalkan saya membuat /tmp/sample.shdengan konten di bawah ini:

#! /bin/bash
echo $HADOOP_HOME

Ketika saya menjalankan skrip di atas, gema baris kosong:

/tmp/sample.sh
   
Mehraban
sumber
1
Bisakah Anda menunjukkan bagian yang relevan dari Anda .bashrc? Dugaan saya adalah Anda tidak exporting :, export HADOOP_HOME=/home/me/dist/hadoopketika Anda menjalankan /tmpsample.sh` (yang memunculkan yang baru bashdengan lingkungan baru) HADOOP_HOME tidak ada di lingkungan yang baru.
John N

Jawaban:

29

Itu karena HADOOP_HOMEvariabel tidak diekspor:

$ cat foo.sh
#!/bin/bash
echo "HADOOP_HOME: $HADOOP_HOME"


$ HADOOP_HOME=/home/me/dist/hadoop
$ echo $HADOOP_HOME
/home/me/dist/hadoop

$ foo.sh
HADOOP_HOME: 

$ export HADOOP_HOME
$ foo.sh
HADOOP_HOME: /home/me/dist/hadoop

Ketika Anda menjalankan skrip shell, skrip itu akan berjalan dalam instance bash sendiri (itulah yang #!/bin/bashdilakukannya) yang merupakan shell anak dari yang saat ini. Variabel tidak diteruskan ke shell anak secara default, hanya jika mereka diekspor. Pikirkan setiap sesi bash sebagai independen (sebagian besar adalah). Anda biasanya tidak ingin variabel yang didefinisikan dalam satu untuk mencemari lingkungan yang lain. Untuk kasus-kasus di mana itu perlu, gunakan export.

terdon
sumber