保留$?使用文件描述符使用多个管道语句输出

时间:2019-04-18 15:17:21

标签: bash awk scripting pipe

在cli

我跑步

没有错误

cmd=$(uname -a) | awk '{print $1}'
echo $?

0

有错误

   cmd=$(uname + -a) | awk '{print $1}'
    echo $?

0

由于使用|,我无法保留命令1的返回错误代码,我使用fd作为可能的解决方案,但没有效果

可能的解决方案

cmd=$(uname + -a) 3>&2| awk '{print $1}' 2>&3

-bash: 3: Bad file descriptoruname: extra operand ‘+’

已解决

cmd=$(uname -a | awk '{print $1}' 2>&1)

echo $?

值不为零。

谢谢大家

1 个答案:

答案 0 :(得分:1)

我怀疑这就是您真正需要的:

cmd=$(uname -a | awk '{print $1; f=1} END{exit !f}')
echo "$?"

如果uname产生任何输出并且awk成功读取/打印它,它将以状态0退出,否则返回1。

看:

$ cmd=$(uname -a | awk '{print $1; f=1} END{exit !f}')
$ echo "$?"
0

$ cmd=$(uname + -a | awk '{print $1; f=1} END{exit !f}')
uname: extra operand ‘+’
Try 'uname --help' for more information.
$ echo "$?"
1