如何保證$BASH_ENV的可用性

如何保證$BASH_ENV的可用性

非互動式、非登入 shell 將嘗試取得 $BASH_ENV 中指定的任何腳本。但是,如何保證在 cron 作業或腳本有機會為任何特定會話設定 $BASH_ENV 之前設定 $BASH_ENV ?硬編碼是編譯 Bash 的唯一選擇嗎?

答案1

如果您希望載入 crontab 中的所有 bash 腳本BASH_ENV,請將其設定在 crontab 層級。

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

如果您只想BASH_ENV為特定條目進行設置,請將其設置在那裡。然後BASH_ENV不會為 crontab 本身中列出的程式碼設置,但無論如何在那裡放置任何複雜的內容都是一個壞主意。

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

如果您希望特定腳本始終加載某些配置文件,請直接從腳本內加載它。

#!/bin/bash
. /path/to/configuration.bash

答案2

BASH_ENV僅在a中讀取非互動式shell,僅當該 shell 是 bash 時(且也不以名稱呼叫sh)。非登入互動式 shell 不會找$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

沒有為使用者在非互動式 shell 中執行的標準檔案。您應該將其設置在單獨的文件中,然後獲取它:

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

或者您可以在某些系統範圍的設定檔中設定它,例如/etc/environment/etc/bashrc.bashrc

相關內容