脚本 bash 在以交互方式或通过 cron 运行时无法获取 $PS1 或 $- 中的差异

脚本 bash 在以交互方式或通过 cron 运行时无法获取 $PS1 或 $- 中的差异

我希望我的 cron 脚本在由系统用户以交互方式运行时详细执行(例如,出于调试目的),否则安静地执行(对于 cron,因为我希望当且仅当我收到错误时才收到电子邮件)。

我已经在我的脚本中尝试过这个:

case "$-" in
*i*) echo "this shell is interactive" > /tmp/log;
*) echo "this shell isn't" > /tmp/log;
esac

但即使以交互方式运行(/bin/bash /tmp/my_script.sh),它也总是返回“此 shell 不是”并且

echo $-

在 shell 脚本中返回 hB 而不是 hiB。

我也尝试过

if [ -z $PS1 ]

认为 cron 没有设置 $PS1,但是再次,从提示符中,echo $PS1 返回此变量,并且在脚本中交互地,它不返回任何内容 :/

我想知道为什么交互方式(/bin/bash my_script.sh)这不返回 $- 的 i 值也不返回 $PS1 的值。

非常感谢您的帮助!

答案1

你可以检查 stdin 是否是 tty

或者,您可以向脚本添加一个标志,告诉它保持安静或详细,而不是让它猜测。

答案2

您可以在 cron 中设置环境变量,并检查它。

将 THISISCRON=1 放在 cron 条目上方的一行上。

答案3

Bash 脚本从不启用交互选项。它们在任何地方都是非交互式的。

相关内容