我有一个Bash命令可以在STDOUT上产生输出,退出代码可以为零或非零。
如果退出代码非零,我想隐藏输出,如果退出代码为零则显示输出。
如果不运行两次命令,如何实现?
答案 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