Apa cara terbaik untuk mengatur variabel lingkungan di .bashrc?

11

Saat mengatur variabel dalam .bashrc, haruskah saya menggunakan ini?

export VAR=value

Atau apakah ini cukup?

VAR=value

Apa perbedaan sebenarnya (jika ada)?

Flávio Amieiro
sumber

Jawaban:

16

Jalan terbaik

export VAR=value

Perbedaan

Perbuatan

VAR=value

hanya menetapkan variabel selama durasi skrip ( .bashrcdalam hal ini). Proses anak (jika ada) dari skrip tidak akan memiliki VAR yang ditentukan, dan setelah skrip keluar, VARpergi.

export VAR=value

secara eksplisit menambah VARdaftar variabel yang diteruskan ke proses anak. Mau mencobanya? Buka shell, lakukan

PS1="foo > "
bash --norc

Shell baru mendapatkan prompt default. Jika sebaliknya Anda melakukan sesuatu seperti

export PS1="foo > "
bash --norc

shell baru mendapatkan prompt yang baru saja Anda atur.

Pembaruan: seperti yang dicatat Ian Kelling di bawah ini, variabel yang ditetapkan .bashrctetap ada di shell yang bersumber .bashrc. Lebih umum setiap kali shell sumber skrip (menggunakan source scriptnameperintah) variabel yang ditetapkan dalam skrip bertahan seumur hidup shell.

agnul
sumber
1
"hanya menetapkan variabel untuk durasi skrip (.bashrc dalam kasus ini)" Itu salah / menyesatkan. Variabel yang diatur dengan cara ini bertahan ke shell interaktif yang membaca .bashrc.
Ian Kelling
PS1adalah contoh buruk dari variabel yang akan diekspor sebagai variabel lingkungan. Ini hanya berarti untuk proses anak yang merupakan cangkang dan ditafsirkan secara berbeda oleh cangkang yang berbeda (misalnya, bash dan dash) Praktik terbaik adalah dengan hanya mengaturnya sebagai variabel shell biasa di .bashrc. Contoh yang lebih baik dari variabel lingkungan meliputi HOME, PATH, EDITOR, dll
Anthony Geoghegan
10

Keduanya tampaknya berfungsi dengan baik, tetapi menggunakan ekspor akan memastikan variabel tersedia untuk subkulit dan program lainnya. Untuk menguji ini coba ini.

Tambahkan dua baris ini ke file .bashrc Anda

TESTVAR="no export"
export MYTESTVAR="with export"

Kemudian buka shell baru.

Berjalan echo $TESTVARdan echo $MYTESTVARakan menampilkan konten masing-masing variabel. Sekarang di dalam shell yang sama hapus dua baris dari file .bashrc Anda dan jalankan bashuntuk memulai subshell.

Menjalankan echo $TESTVARakan memiliki output kosong, tetapi menjalankan echo $MYTESTVARakan menampilkan "dengan ekspor"

Mike H
sumber