我有两个命令,我们称之为 command1 和 command2 。 我需要做的是:
我如何以一种以后易于理解的方式在bash中编写它?
答案 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
不要低估保持简单的价值......或添加 评论 。