Cara menjamin ketersediaan $ BASH_ENV

8

Shell non-interaktif, non-login akan mencoba sumber skrip apa pun yang ditentukan dalam $ BASH_ENV. Tetapi bagaimana saya menjamin $ BASH_ENV disetel sebelum pekerjaan cron atau skrip memiliki kesempatan untuk menetapkan $ BASH_ENV untuk sesi tertentu? Apakah satu-satunya pilihan untuk mengkompilasi Bash dengan hardcoded?

Igorio
sumber
Lihat pam_env. Atau cukup sumber $HOME/.envdi semua skrip Anda.
Mikel

Jawaban:

7

Jika Anda ingin semua skrip bash di crontab Anda dimuat BASH_ENV, atur di level crontab.

BASH_ENV=/path/to/startup.bash
12 34 * * * /path/to/bash_script
1 23 1 * * /path/to/other_bash_script

Jika Anda ingin mengatur BASH_ENVhanya untuk entri tertentu, atur di sana. Maka BASH_ENVtidak akan ditetapkan untuk kode yang tercantum dalam crontab itu sendiri, tetapi itu ide yang buruk untuk tetap membuat sesuatu yang rumit di sana.

12 34 * * * export BASH_ENV=/path/to/startup.bash; /path/to/bash_script
1 23 1 * * /path/to/other_bash_script

Jika Anda ingin skrip tertentu selalu memuat beberapa file konfigurasi, muat langsung dari dalam skrip.

#!/bin/bash
. /path/to/configuration.bash
Gilles 'SANGAT berhenti menjadi jahat'
sumber
Mengapa Anda repot-repot exporting $BASH_ENVjika Anda hanya pengaturan untuk proses tunggal? Adil BASH_ENV=/path/to/startup.bash /path/to/bash_scriptadalah cara yang masuk akal untuk melakukannya.
mikeserv
4

BASH_ENVhanya dibaca dalam shell non-interaktif , dan hanya jika shell itu bash (dan juga tidak dipanggil dengan nama sh). Shell interaktif non-masuk tidak mencari $BASH_ENV:

$ export BASH_ENV=/home/cuonglm/bash-env.sh
$ bash -lci '. test.sh'
QWERTY
$ bash -lc '. test.sh'
BASH_ENV read
QWERTY
$ bash -ci '. test.sh'
QWERTY
$ bash -c '. test.sh'
BASH_ENV read
QWERTY

Tidak ada file standar yang dijalankan di shell non-interaktif untuk pengguna. Anda harus mengaturnya dalam file yang terpisah lalu sumberkan:

bash -c '. ~/.profile; echo 123'

Atau Anda dapat mengaturnya di beberapa file konfigurasi sistem seperti /etc/environmentatau /etc/bashrc.bashrc.

cuonglm
sumber
Saya berharap / etc / environment akan bekerja, tetapi tidak bersumber dari shell di Mac OS 10.6 sejauh yang saya tahu. /etc/bashrc.bashrc terdengar menarik, tapi saya mengalami kesulitan melacak info apa pun di dalamnya. Atau apakah itu salah cetak?
Igorio