Shell
為什麼 SHELL 在 Csh 腳本中指向 /bin/sh?
是的,我知道 C-shell 不好。不,我沒有選擇 C-shell。是的,我更喜歡使用合適的外殼。不,我無法切換到更好的外殼。
我有一個非常簡單的腳本:
/tmp/env_test.csh
#!/bin/csh -f env
當我從使用 tcsh shell 登錄的使用者執行此腳本時,
SHELL
等於/bin/tcsh
. 當我從 cron 執行此腳本時,SHELL
等於/bin/sh
.為什麼 SHELL 沒有適當更新?我需要做什麼來解決這個問題?
調查
man 1 csh
。該部分Pre-defined and environment variables
列出了哪些變數csh
定義或尊重。有一個shell
小寫的變數:shell The file in which the shell resides. This variable is used in forking shells to interpret files that have execute bits set, but which are not executable by the system. (See the descrip- tion of Non-builtin Command Execution below.) Initialized to the (system-dependent) home of the shell.
那麼讓我們來看看:
% echo $shell /bin/csh
您應該在您的 crontrab 中將
SHELL
變數設置為/bin/csh
,您可以通過以下方式檢查 cron 環境變數:* * * * * env > ~/cron-env tail -f ~/cron-env
預設值
SHELL
應設置為/bin/sh
。