如果另一个成功,则执行命令并将bd中的stdout和stderr记录到文件中

时间:2017-09-27 15:43:33

标签: bash

我有两个命令,我们称之为 command1 command2 。 我需要做的是:

  • 命令2仅在命令1成功时执行
  • 将两个命令的stdout和stderr重定向到文件,让我们称之为log.txt

我如何以一种以后易于理解的方式在bash中编写它?

2 个答案:

答案 0 :(得分:7)

我想你想要

( command1  &&  command2 )   >&   /tmp/log.txt

>& is一个bash ism(也存在于zsh中)以重定向stderr和stdout

括号按grouping commands创建子shell。

(在后台添加&,在最后.txt之后添加 File "build/bdist.solaris-2.11-sun4v/egg/behave/model.py", line 1903, in run self.func(context, *args, **kwargs) TypeError: step_impl() keywords must be strings

答案 1 :(得分:4)

围绕一段代码包裹{}以重定向其所有i / o。您可以堆叠您想要集体处理的所有代码,或者保持简短和甜蜜。

使用&&仅在前一个命令成功时才执行以下命令 (仅当前一个命令失败时,才使用||执行以下命令。)
这使您可以设置if / then / else结构而无需额外的语法。

{ cmd1 && cmd2; } >log.txt 2>&1 

但如果你以后想要它很容易理解,甚至可能对不太熟悉bash的人,你也可以从实际的if / then / elif / else结构收集所有输出 -

if cmd1          # if cmd1 succeeds
then cmd2        # then run cmd2
fi >log.txt 2>&1 # 2>&1 send stderr where stdout went

不要低估保持简单的价值......或添加 评论