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