Di Linux (Ubuntu 11.04) di bash, apakah mungkin untuk sementara menetapkan variabel lingkungan yang hanya akan berbeda dari variabel normal selama skrip? Misalnya, dalam skrip shell, membuat aplikasi yang menyimpan ke HOME portabel dengan mengatur HOME ke folder untuk sementara di direktori kerja saat ini, lalu meluncurkan aplikasi.
linux
bash
environment-variables
Suchipi
sumber
sumber
Jawaban:
sumber
vblank_mode=0 glxgears
. Ini berfungsi, tetapi juga mengatakanvblank_mode=0: command not found
setelah berjalan, sedangkan prependingenv
tidak menyebabkan ini. [pengujian ...] Ternyata zsh tidak menyukainya (namun masih menggunakannya dengan benar), tetapi bash tidak masalah. Saya kira saya akan menggunakanenv
metode ini mulai sekarang.VAR1="hello" echo $VAR1
tidak mengembalikan apa-apa?VAR1="hello" bash -c 'echo $VAR1'
sumber
VAR=value myScript args ...
PATH=$PATH:XYZ echo $PATH | grep XYZ
tidak ada keluaran? 2. Apa perbedaan antara menggunakan dan tidak menggunakanenv
?PATH=$PATH:XYZ sh -c 'echo $PATH' | grep XYZ
- tanda kutip tunggal adalah kuncinya di sinienv
dan tidak menggunakannya?IFS=$'\n' for l in lines; do ... done
Taruh saja
pada titik di skrip tempat Anda ingin perubahan terjadi. Karena setiap proses memiliki kumpulan variabel lingkungannya sendiri, definisi ini secara otomatis akan berhenti memiliki signifikansi apa pun ketika skrip berakhir (dan dengan itu contoh bash yang memiliki lingkungan yang berubah).
sumber
export
akan meneruskan variabel ke subkulit, tetapi tidak mengontrol shell induk. Jika Anda menulis skrip yang diawali dengan "#! / Bin / sh" atau sejenisnya, variabel APA PUN yang Anda setel akan hilang saat skrip keluar.source
skrip itu akan dieksekusi oleh shell yang sama tempat Anda mengetik perintah.$HOME
diwarisi oleh perintah apa pun yang dijalankan dari skrip. Dan jika dia tidak melakukannya, dan pengaturan$HOME
hanya untuk kepentingan skrip itu sendiri, maka dia mungkin akan lebih baik memodifikasi skrip agar mengacu pada sesuatu selain$HOME
.