【发布时间】:2011-02-21 15:27:51
【问题描述】:
我有一个执行多个文件操作的 bash 脚本。当任何用户运行此脚本时,它都会成功执行并输出几行文本,但是当我尝试 cron 时,它会出现问题。它似乎正在运行(我在 cron 日志中看到一个条目显示它已被启动)但没有任何反应,它不输出任何内容并且不执行任何文件操作。它也不会出现在任何地方的正在运行的进程中,因此它似乎会立即退出。
经过一些故障排除后,我发现删除“set -e”解决了这个问题,它现在可以从系统 cron 运行而没有问题。所以它可以工作,但我宁愿启用 set -e 以便脚本在出现错误时退出。有谁知道为什么“set -e”导致我的脚本退出?
感谢您的帮助,
瑞恩
【问题讨论】:
-
如果
set -e导致它在出错时退出......那不是意味着某处有错误吗? -
如果我手动运行脚本就会执行。另外,如果遇到任何问题,应在退出前将错误代码打印到标准输出。这不会发生。
-
除非您展示您的脚本,否则我们无法判断问题所在。另外,在我看来,
set -e不能替代正确的错误处理,根本不应该使用。 -
@MitchDempsey, ...对于
set -e目的而言,什么是“错误”和一个理性人头脑中的错误不一定是一回事。看看BashFAQ #105 中的练习有多少你做对了。