我正在尝试将多个 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
如果其中一个命令失败,那么它后面的所有其他命令都不会被执行。
如果要执行所有命令而不管前面的命令是否失败,请用分号分隔它们:
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 认为下一行是新命令;如果省略反斜杠,则需要将整个命令写在一行中。
与在任何地方使用反斜杠相比,更方便的方法&&是在任何命令失败时指示 shell 退出脚本。您可以使用set带有参数的内置函数来执行此操作-e。有了它,您可以以更自然的方式编写脚本:
set
-e
#! /bin/sh set -e cd /my_folder rm *.jar svn co path to repo mvn compile package install
将其保存到文件中,例如myscript,并使其可执行:
myscript
chmod +x myscript
您现在可以像机器上的其他程序一样执行该脚本。但是,如果您没有将它放在PATH环境变量中列出的目录中(例如/usr/local/bin,或在某些 Linux 发行版上~/bin),那么您将需要指定该脚本的路径。如果它在当前目录中,则使用以下命令执行它:
PATH
/usr/local/bin
~/bin
./myscript
脚本中的命令的工作方式与第一个示例中的命令相同;下一个命令仅在前一个命令成功时执行。对于所有命令的无条件执行,只需不要调用set -e:
set -e
#! /bin/sh cd /my_folder rm *.jar svn co path to repo mvn compile package install