为什么Csh脚本中SHELL指向/bin/sh?

为什么Csh脚本中SHELL指向/bin/sh?

是的,我知道 C-shell 不好。不,我没有选择C-shell。是的,我更喜欢使用合适的外壳。不,我无法切换到更好的 shell。

我有一个非常简单的脚本:

/tmp/env_test.csh

#!/bin/csh -f

env

当我从使用 tcsh shell 登录的用户运行此脚本时,SHELL等于/bin/tcsh.当我从 cron 运行此脚本时,SHELL等于/bin/sh.

为什么 SHELL 没有适当更新?我需要做什么才能解决这个问题?

答案1

调查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

答案2

您应该在 crontrab 中设置该SHELL变量,您可以通过以下方式检查 cron 环境变量:/bin/csh

* * * * * env > ~/cron-env
tail -f ~/cron-env

默认值SHELL应设置为/bin/sh

SO:如何模拟cron执行脚本的环境?

相关内容