如果退出代码不为零,则在Bash中隐藏命令输出

时间:2016-09-05 01:29:33

标签: bash

我有一个Bash命令可以在STDOUT上产生输出,退出代码可以为零或非零。

如果退出代码非零,我想隐藏输出,如果退出代码为零则显示输出。

如果不运行两次命令,如何实现?

2 个答案:

答案 0 :(得分:3)

状态代码仅在进程终止时才知道。因此,执行所要求的唯一方法是运行将stdout重定向到临时文件的进程,然后在终止时检查其状态代码。如果它是非零的,只需删除临时文件,如果它为零,只需将临时文件的内容输出到stdout

这是一个自动化的bash脚本:

#!/bin/bash

temp_file=$(mktemp)    
"$@" > temp_file
if [[ $? == 0 ]]; then
    cat "$temp_file"
fi
rm "$temp_file"

如果您调用此脚本mute,则可以使用以下命令foo --bar

mute foo --bar

答案 1 :(得分:2)

  • 将输出保存到变量
  • 检查返回代码然后
  • 如果输出为零,则打印输出

    output="$(command)"
    
    if [[ $? -eq 0 ]] ; then
        echo "$output"
    fi