Linux中一次运行多个命令
如果要完成的任务需要执行大量的命令,那可以单独写成一个脚本,但是对于经常一块运行的几个命令单独写成脚本就有点得不偿失,此时在.zshrc
中以命令别名的形式一次性运行多个命令是一个更好的选择。一个典型的例子,每次push
一个仓库时需要执行三步,即
git add .
, git commit -m "foobar"
,
git push
,
在我的zsh
配置中,我将其合并为zpush
,代码如下:
1 | # For a full list of active aliases, run `alias`. |
使用分号;
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
的输入,通过使用管道,可以将多个命令边接起来,形成一个命令链。