【发布时间】:2018-07-11 02:18:17
【问题描述】:
我希望我能区分脚本何时以交互方式运行与“at”或“cron”运行。如果用户在命令行上运行脚本,我想将输出放到他们的屏幕上,但如果它通过 'at' 或 'cron' 运行,那么输出将转到日志文件。
我在网上搜索并看到了很多关于使用“$-”的建议(尽管不是针对 AIX 的)。这听起来很有希望,但当我尝试时,它并没有那么有用。
如果我在提示符下键入“echo "$-"',我会返回 "ims"。如果我使用 echo 命令创建一个脚本,它会返回“h”。如果我通过“at”提交脚本,我得到“h”,如果我让 cron 运行它,我得到“h”。
我还研究了使用 TERM 和 PS1,但它们再次不允许我区分由“cron”或“at”运行的脚本与在命令行调用的脚本。
还有什么我可以在 AIX 上尝试的吗?
谢谢。
如果我运行这个脚本
格伦。这是我正在运行的脚本。我使用“tty -s”而不是“$-”得到了想要的结果。难道我做错了什么?你看到“$-”的结果总是说我不在交互式 shell 中。
#!/bin/ksh93
echo "tty -s"
if tty -s
then
echo " - I'm an interactive shell"
else
echo " - I'm not interactive"
fi
echo "\$-"
case $- in
*i*) echo " - I'm an interactive shell";;
*) echo " - I'm not interactive";;
esac
当脚本通过 1) 命令行、2) “at”和 3) cron 运行时,我得到了这三个结果集。
command line result
tty -s
- I'm an interactive shell
$-
- I'm not interactive
at result
tty -s
- I'm not interactive
$-
- I'm not interactive
Cron result
tty -s
- I'm not interactive
$-
- I'm not interactive
通过在命令行运行我的意思是我正在运行“script.ksh >> script.log”。如果我从命令行运行“echo $-”,它会返回“ims”,但是当脚本中引用 $- 时,它总是返回“h”。
【问题讨论】: