Shell

為什麼 SHELL 在 Csh 腳本中指向 /bin/sh?

  • June 18, 2019

是的,我知道 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

SO:如何模擬環境cron執行腳本?

引用自:https://unix.stackexchange.com/questions/525716