【发布时间】:2015-01-14 16:07:04
【问题描述】:
在一个 shell 脚本中,我使用带有大括号的代码块将所有输出通过管道传输到控制台,并使用带有 tee 的日志文件。
#!/bin/bash
{
echo "Foo bar"
echo "foo bar on STDERR" >&2
ERRL=66
exit 99
} 2>&1 | tee log-file.log
(这只是一个小演示脚本,原来的要复杂得多)
问题是,exit 99 行无效,脚本以退出代码 0 结束。(我认为这是 tee 命令的退出代码)
我尝试在脚本末尾添加行 exit $ERRL,但它显示变量 $ERRL 在大括号外为空。
当代码块中出现问题时,我该怎么做才能以错误代码结束脚本 - 而不会丢失日志文件的输出?
【问题讨论】:
-
检查 bash PIPESTATUS 数组。见tldp.org/LDP/abs/html/internalvariables.html
-
嘘,咝咝作响:链接到 ABS——它只是偶尔维护,而且在不完全不准确的情况下会展示不良做法,这是相当臭名昭著的。诚然,该特定页面还不错(有点过时,但没有明显的完全错误),但回顾之前的那些页面,第 9.2 节完全缺少一些 bash 4.3 更新,并显示 非常在有可靠变量类型可用时识别变量类型的方法很容易出错。
标签: bash shell scripting exit-code