2017-05-05 37 views
1

我有一个foobar命令,始终是冗长和我想显示其输出(stdout和stderr),以仅当foobar的退出代码是错误代码控制台。如何使用shell管道基础上,退出代码有条件地显示输出?

我想要实现这个而不输出保存到临时文件。我已经知道该解决方法,但我不想生成新文件。

这暗示这样的解决方案的缺点是,只有当foobar的结束整个输出可以看出,因为只有那么我们就会知道,如果它是成功还是失败。

+0

你能给一个代码示例吗? – 123

+1

也有你不能使用文件的原因吗? – 123

+0

这不是一种解决方法;这是你必须做的。 shell不会以任何其他方式缓冲输出。 – chepner

回答

4

你可以试试只是将输出保存在一个变量中。一个简单的一行将是:

r=$(foobar 2>&1) || echo "$r"

+0

我发现这一个重要的缺点,使用这种方法,当我失去它,我不希望ANSI着色。 – sorin

+0

@sorin ANSI代码应该可以正常工作,并且它们在我的测试中执行。 'R = $(printf的 “\\ 033 [33mHello \\ 033 [39米\ n” 个;出口1)|| echo“$ r”'在我的终端上以黄色打印“Hello”。回声不会解释转义序列,但如果您直接运行时获取颜色,foobar命令应该这样做。 – ccarton

+0

的确,我只需要强制使用它,但是这对于任何包装都是必需的。我最终实现了您的解决方案,无需外部工具。 – sorin

1

你可能想的chronic实用程序:

慢性运行一个命令,并安排它的标准输出和标准错误如果命令失败,只显示(非零退出或崩溃)。如果命令成功,则任何无关的输出都将被隐藏。

可用性:

  • apt-get install moreutils在Debian/Ubuntu的
  • brew install moreutils在MacOS(OSX)
  • yum install moreutils在RHEL(EPEL)/ Fedora的/ CentOS的
相关问题