小编典典

在一行中执行组合多个 Linux 命令

all

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

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

阅读 118

收藏
2022-04-02

共1个答案

小编典典

如果您只想在前一个命令成功的情况下执行每个命令,则使用&&运算符将​​它们组合起来:

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。有了它,您可以以更自然的方式编写脚本:

#! /bin/sh
set -e

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

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

chmod +x myscript

您现在可以像机器上的其他程序一样执行该脚本。但是,如果您没有将它放在PATH环境变量中列出的目录中(例如/usr/local/bin,或在某些
Linux 发行版上~/bin),那么您将需要指定该脚本的路径。如果它在当前目录中,则使用以下命令执行它:

./myscript

脚本中的命令的工作方式与第一个示例中的命令相同;下一个命令仅在前一个命令成功时执行。对于所有命令的无条件执行,只需不要调用set -e

#! /bin/sh

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