如何从管道中找不到命令

时间:2015-02-12 21:22:45

标签: bash shell

我有以下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)。

1 个答案:

答案 0 :(得分:0)

$()捕获命令标准输出(但不是标准错误)。

2>&1将标准错误重定向到标准输出指向的时间(并让$()捕获"标准错误"输出也是如此。)

您已将标准输出和标准错误从主脚本重定向到您的日志文件,因此那里的任何内容都会被记录在那里。

然后,您在$()执行中捕获标准错误(使用“2>& 1”)。

如果您不希望$a抓住该输出,请将2>&1放在那里,让它落到之前的exec重定向。