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

如果另一个命令成功,则执行该命令,并将stdout和stderr记录到bash中的文件中,bash,Bash,我有两个命令,让我们称它们为command1和command2。 我需要做的是: 只有在命令1成功时才执行命令2 将这两个命令的stdout和stderr重定向到一个文件,我们称之为log.txt 我将如何在bash中以一种稍后易于理解的方式编写它?我想您希望 ( command1 && command2 ) >& /tmp/log.txt &abashism(也存在于zsh中)用于重定向stderr和stdout 括号通过创建子shell (要将

我有两个命令,让我们称它们为command1command2。 我需要做的是:

  • 只有在命令1成功时才执行命令2
  • 将这两个命令的stdout和stderr重定向到一个文件,我们称之为log.txt
我将如何在bash中以一种稍后易于理解的方式编写它?

我想您希望

( command1  &&  command2 )   >&   /tmp/log.txt
&
a
bash
ism(也存在于
zsh
中)用于重定向stderr和stdout

括号通过创建子shell

(要将其放在背景中,请在行末的final
.txt
之后添加一个
&

我想您需要

( command1  &&  command2 )   >&   /tmp/log.txt
&
a
bash
ism(也存在于
zsh
中)用于重定向stderr和stdout

括号通过创建子shell


(要将其放在后台,请在行的末尾,在final
.txt
之后添加一个
&

将{}环绕在代码块周围,以重定向其所有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

不要低估保持它的简单性…或添加注释

围绕代码块包装{}以重定向其所有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

不要低估保持简单的价值…或者添加注释的价值

长版本:
command1>/tmp/log.txt 2>&1&&command2>/tmp/log.txt 2>&1
如果我想在后台执行整件事怎么办?它会像在末尾添加一个“&”那样简单,还是会把输出重定向搞砸;重定向与单个命令关联,但是
&
终止了整个列表,该列表可以由多个命令组成。长版本:
command1>/tmp/log.txt 2>&1&&command2>/tmp/log.txt 2>&1
如果我想在后台执行整个过程,该怎么办?它会像在末尾添加一个“&”那样简单,还是会把输出重定向搞砸;重定向与单个命令相关联,但是
&
会终止整个列表,该列表可以由多个命令组成。