执行在一行中结合多个linux命令

我正在尝试在一行中合并多个linux命令来执行部署操作。 例如

cd /my_folder rm *.jar svn co path to repo mvn compile package install 

如果你想要执行每个命令只有前一个成功,然后结合他们使用&&操作符:

 cd /my_folder && rm *.jar && svn co path to repo && mvn compile package install 

如果其中一个命令失败,则其后的所有其他命令将不会被执行。

如果要执行所有的命令而不pipe前面的命令是否失败,用分号分隔它们:

 cd /my_folder; rm *.jar; svn co path to repo; mvn compile package install 

在你的情况下,我想你想要的第一个情况下执行下一个命令取决于前一个的成功。

你也可以把所有的命令放在一个脚本中,然后执行:

 #! /bin/sh cd /my_folder \ && rm *.jar \ && svn co path to repo \ && mvn compile package install 

(行尾的反斜杠是为了防止shell认为下一行是一个新的命令;如果你省略了反斜杠,则需要将整个命令写入一行)。

保存到一个文件,例如myscript ,并使其可执行:

 chmod +x myscript 

现在可以像机器上的其他程序一样执行该脚本。 但是如果你不把它放在PATH环境variables(例如/usr/local/bin ,或者某些Linux发行版~/bin )中列出的目录中,那么你需要指定该脚本的path。 如果它在当前目录中,则执行它:

 ./myscript 

脚本中的命令和第一个例子中的命令一样, 下一个命令只在前一个成功时才执行。 要无条件执行所有命令,只需按照自己的行列出每个命令即可:

 #! /bin/sh cd /my_folder rm *.jar svn co path to repo mvn compile package install 

我发现使用; 分开的命令只能在前台工作。 例如:

cmd1; cmd2; cmd3 & cmd1; cmd2; cmd3 & – 将仅在后台执行cmd3 ,而cmd1 && cmd2 && cmd3 & – 将在后台执行整个链,如果没有错误。

为了迎合无条件执行,使用括号解决了这个问题:

(cmd1; cmd2; cmd3) & – 将在后台执行命令链,即使任何步骤失败。

您可以使用分号分隔您的命令:

 cd /my_folder;rm *.jar;svn co path to repo;mvn compile package install 

那是你的意思吗?

 cd /my_folder && rm *.jar && svn co path to repo && mvn compile package install 

如果你想要执行所有的命令,不pipe前面的命令是否执行,你可以使用分号(;)来分隔命令。

 cd /my_folder; rm *.jar; svn co path to repo; mvn compile package install 

如果只有在前一个命令成功的情况下才想执行下一个命令,则可以使用&&来分隔这些命令。

 cd /my_folder && rm *.jar && svn co path to repo && mvn compile package install 

在你的情况下,连续命令的执行似乎取决于以前的命令,所以使用第二个例子,即使用&&来join命令。

什么是唯一的一个&符号的效用? 今天早上,我在XFCE面板(Manjaro + XFCE)中做了一个启动器,同时启动2个密码pipe理器:

 sh -c "keepassx && password-gorilla" or sh -c "keepassx; password-gorilla" 

但是,它不工作,我想要的。 IE浏览器,第一个应用程序启动,但第二次启动只有当前closures: – /

但是,我发现(只有一个符号):

 sh -c "keepassx & password-gorilla" 

它现在就像我想要的那样工作