Menjalankan skrip shell tanpa variabel lingkungan

17

Seperti yang saya tahu, skrip shell yang baru berjalan mewarisi variabel lingkungan itu. Apakah ada cara untuk memblokir ini? (menjalankan shell tanpa pewarisan variabel)

Eonil
sumber

Jawaban:

21

Tampaknya Anda dapat mengawali skrip env -iyang akan membersihkan lingkungan sebelum menjalankan skrip:

env -i sh test.sh

Dari man env:

-i, --ignore-environment
              start with an empty environment

Tidak yakin mengapa Anda ingin melakukan ini ...

vmfarms
sumber
Terima kasih. Ini berhasil! Saya memerlukan ini untuk memanggil skrip build di IDE tanpa mempengaruhi variabel lingkungan konfigurasi IDE. Namun masih jauh ke gawang. Ini dapat membantu rasa penasaran Anda!
Eonil
Untuk menambahkan use case lain: Saat ini saya mengevaluasi ikan dan zsh sebagai alternatif untuk bash. Tapi saya tidak cukup siap untuk mempromosikan kandidat shell sebagai shell login saya (seperti pada chsh .... Jika saya hanya membuka jendela terminal dan menjalankan zshatau fish(dengan atau tanpa -ltidak masalah) itu mencemari lingkungan saya dengan semua jenis variabel dari shell saya memulainya Melakukan trik dengan env -cmemecahkan masalah ini untuk saya env -i TERM=xterm-256color $(which fish)..
Paidhi
Ini berguna jika Anda memiliki tugas cron yang gagal karena lingkungan tidak dikonfigurasi dengan benar dan Anda perlu mengujinya; juga cara yang baik untuk menguji apakah skrip Anda membuat asumsi tentang pengaturan lingkungan. Terima kasih!
Dihancurkan
Tempat lain yang mungkin berguna untuk menguji beberapa pekerjaan berkala (seperti pekerjaan cron) untuk memastikan tidak ada ketergantungan lingkungan pada skrip. Hal yang sama dengan perintah yang akan dijalankan dalam sumber daya "Exec" dalam manifes wayang.
TommyTheKid
1

Satu kemungkinan (meskipun terlihat agak jelek):

exec -c $SCRIPTakan mulai $ SCRIPT dengan lingkungan kosong. (lihat man bashpencarian exec \[-cl\]).

berat
sumber
1
Ini bekerja hampir sama dengan env -i, namun, saya memilih untuk menggunakan env -i karena exec berhenti mengeksekusi sisa skrip.
Eonil
-1

Sejauh yang saya tahu, jawabannya adalah "Tidak". Anda dapat mengganti variabel lingkungan dalam skrip itu sendiri. Nilai variabel lingkungan harus beralih kembali ke nilai aslinya setelah skrip selesai berjalan. Anda mungkin perlu menjalankan skrip sebagai proses anak-anak: $ this.script.sh & untuk menghindari keharusan keluar dari shell Anda sekali saja menjalankan skrip untuk mereset variabel lingkungan Anda ke nilai aslinya.

Edit:

Dari poster sebelumnya, sepertinya saya salah tentang hal itu tidak mungkin.

pengguna53079
sumber