我有一个嘈杂的命令,我想在成功时隐藏其输出。但是,在失败的情况下,该输出可能对调试有帮助,所以我想在打印错误消息之前显示它。
目前,我这样做:
OUTPUT=$( cmd1 2>&1 ) || {
echo $OUTPUT
echo cmd1 failed
exit 1
}
是否可以通过cmd1
(或双管道)输出||
的输出,以便我可以避免为输出创建变量?
答案 0 :(得分:1)
您需要保存命令某处的输出,因为在命令完成是否将输出发送到控制台之前您都不知道。将输出管道输送到某些东西不会有帮助,因为管道没有大的缓冲区。
您有一些缓冲选项,但如果您不期望兆字节的输出,那么使用变量是合理的,这远远超出noisy
的定义。您也可以使用临时文件,但除非您打算在内存非常有限的系统上部署(按照今天的标准),否则几乎没有什么优势。
答案 1 :(得分:1)
试试:
OUT=$(command....) && OUT= || { echo $OUT; exit 1;}
&&
(退出0)时执行的OK
答案 2 :(得分:1)
Joey Hess'moreutils有一个命令chronic(1)
,它可以完全按照您的要求运行:它运行命令,吃stdout
和stderr
,除非< / em>该命令退出非零,在这种情况下输出将通过。