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?


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

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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.