Linux中一次运行多个命令

如果要完成的任务需要执行大量的命令,那可以单独写成一个脚本,但是对于经常一块运行的几个命令单独写成脚本就有点得不偿失,此时在.zshrc中以命令别名的形式一次性运行多个命令是一个更好的选择。一个典型的例子,每次push一个仓库时需要执行三步,即 git add . , git commit -m "foobar", git push, 在我的zsh配置中,我将其合并为zpush,代码如下:

~/.zshrc
1
2
# For a full list of active aliases, run `alias`.
alias zpush="git add . && git commit -m $HOST-$(date "+%Y%m%d") && git push"

使用分号;

1
cmd1 ; cmd2 ; cmd3

前一命令成功与否都会继续执行下一条命令.

使用&&

1
cmd1 && cmd2 && cmd3

前一命令执行成功了才会继续执行后边的命令

使用||

1
cmd1 || cmd2 || cmd3

前一命令执行失败了才会继续执行后边的命令

混合集中分隔符

1
cmd1 || cmd2 || cmd3 &&  cmd4

cmd1执行成功了,紧接着后边有两个"||"因此cmd2, cmd3都没执行,后边遇到了&&,而这之前的命令组合被认为是执行成功的,因此cmd4得以执行.

1
cmd1 && cmd2 && cmd3 || cmd4

cmd1执行成功了,继而执行cmd2,执行失败,因此 cmd3不被执行,后边遇到了"||",而知之前的命令组合被认为是执行失败的,因此cmd4得以执行.

1
cmd1 && cmd2 && cmd3 ; cmd4

cmd1执行成功了,继而执行cmd2,执行失败,因此 cmd3不被执行,后边遇到了";",相当于把后边的命令放到了新行,这样的话无论如何后边的命令都会执行,因此cmd4得以执行.

1
cmd1 || cmd2 || cmd3 || cmd4 && cmd5 && cmd6 ; cmd7

cmd1执行失败,后边为"||"因此cmd2得以执行,cmd2执行成功,紧接着后边有两个"||"因此cmd3,cmd4没有执行,后边遇到了&&,而之前的命令组合被认为是执行成功的,因此cmd5得以执行,执行发生错误,因此cmd6没有被执行,但后边是";",所以无论如何cmd7都会被执行.

使用大括号

使用大括号{}可以将多个命令组合在一起,并将它们视为单个命令。例如:

1
{ cmd1 ; cmd2 ; cmd3 ; }

大括号中的命令将按顺序执行。类似于使用分号的方法,需要注意处理错误和异常情况。 大括号还可以与双竖线||和双与号&&结合使用,以实现更复杂的控制流程。

使用子shell

使用子shell可以将多个命令放在括号中,并将它们视为单个命令。例如:

1
( cmd1 ; cmd2 ; cmd3 ; )

子shell中的命令将作为单独的进程运行,因此它们的环境变量和状态不会影响到父shell。这对于需要隔离开父shell的操作非常有用。 在子shell中运行的命令将按顺序执行,类似于使用分号的方法。子shell还可以与双竖线||和双与号&&结合使用,以实现更复杂的控制流程。

使用反引号或$()

1
cmd1 $(cmd2)

在这个例子中,cmd2的输出将作为参数传递给cmd1.

使用管道符|

1
cmd1 |cmd2

cmd的输出将作为cmd2的输入,通过使用管道,可以将多个命令边接起来,形成一个命令链。