我有以下bash脚本:
exec &>f.log
function f() {
echo "err: $@"
exit 1
}
trap 'f' ERR
a=$( aaa --version 2>&1 )
echo $a
如何找不到'命令' f.log中的消息,假设aaa不在$ PATH中?
注意:2>& 1在这里很重要,因为在aaa命令成功的情况下需要$ a值(如果存在,则aaa将其版本放入stderr)。
答案 0 :(得分:0)
$()
捕获命令标准输出(但不是标准错误)。
2>&1
将标准错误重定向到标准输出指向的时间(并让$()
捕获"标准错误"输出也是如此。)
您已将标准输出和标准错误从主脚本重定向到您的日志文件,因此那里的任何内容都会被记录在那里。
然后,您在$()
执行中捕获标准错误(使用“2>& 1”)。
如果您不希望$a
抓住该输出,请将2>&1
放在那里,让它落到之前的exec
重定向。