Linux中连接多个命令
介绍
在Linux
中可以同时执行多个命令,同时执行多个命令同时执行的规则有下面几种情况。
- 执行多个命令,前一个命令执行成功,才执行后一个命令。
- 执行多个命令,前一个命令执行失败,才执行后一个命令。
- 执行多个命令,不管前一个执行失败,都执行后一个命令。
使用&&
,确保前一个命令执行成功,才执行后一个命令
在多个命令中使用&&
符号连接,必须是前一个命令执行成功,接着才会执行后一个命令,不管命令有多少个都是按这种规则去执行的。
下面就以两个简单的命令来举例,第一个命令是cd ~/.ssh/matiasDW
,第二个命令是pwd
。
$ cd ~/.ssh/matiasDW && pwd
/Users/matias/.ssh/matiasDW
如果第一个命令输入一个错误的路径,比如cd ~/.ssh/MT
,会是什么情况呢。
$ cd ~/.ssh/MT && pwd
cd: no such file or directory: /Users/matias/.ssh/MT
可以看出前一个命令执行失败,后一个命令是不能继续执行了。
使用||
,确保前一个命令执行失败,才执行后一个命令
在多个命令中使用||
符号连接,则代表着必须是前一个命令执行失败,才会接着执行后一个命令,如果前一个命令执行成功,后一个命令就不会执行。
下面就来看一个例子,还是使用cd ~/.ssh/MT
作为第一个命令,pwd
为第二个命令。
$ cd ~/.ssh/MT || pwd
cd: no such file or directory: /Users/matias/.ssh/MT
/Users/matias/.ssh/matiasDW
这里第一个命令执行失败了,执行了第二个命令。
第一个路径使用正确的路径,比如cd ~/.ssh/matiasDW
,再来看一下。
$ cd ~/.ssh/matiasDW || pwd
没有输出,则表面第二个命令pwd
没有执行。
使用;
,不管前一个命令执行成功与否,都执行后一个命令
3,执行多个命令使;
在多个命令中使用;
符号连接,表示不管前一个命令的执行是否成功,都会执行后面的命令。
接下来再以刚才的命令cd ~/.ssh/matiasDW
以及 pwd
命令。
$ cd ~/.ssh/matiasDW ; pwd
/Users/matias/.ssh/matiasDW
如果第一个命令输入一个错误的路径,比如cd ~/.ssh/MT
,会是什么情况呢。
$ cd ~/.ssh/MT ; pwd
cd: no such file or directory: /Users/matias/.ssh/MT
/Users/matias/.ssh/matiasDW
可以看出使用;
符合连接多个命令,不管前面的命是成功还是失败,都会执行后面的命令。
应用
使用脚本连接多个命令
我经常使用的更新前端项目的脚本中,有这么一句命令。用来重启nginx
服务的。
ssh -t fofpro "cd /data/apps/web-modules/module-name/; rm -rf dist.last; mv dist dist.last; mv dist.fresh dist; nginx -s reload;"
这条命令中: ssh -t fofpro
使用别名连接远程服务器。 cd /data/apps/web-modules/module-name/
是切换到指定目录(这个是对应的前端打包文件存放的路径)。 rm -rf dist.last; mv dist dist.last; mv dist.fresh dist
先删除dist.last
目录,将dist
目录重命名为dist.last
,将dist.fresh
目录重命名为dist
,这样我们就始终保留上一个版本的备份,更新后如果发现有问题可以快速切换回去。 nginx -s reload
是重启nginx
服务。
在这句脚本中,就使用了;
来链接多个语句,虽然不够严谨,但是我们能确保重启nginx
服务。
总结
执行多个无关命令时,使用;
符号连接。 命令之间有依赖关系时需要看情况使用||
或&&
。