我试图在一行中合并多个linux命令以执行部署操作.
cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install
我试图在一行中合并多个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认为下一行是新命令;如果省略反斜杠,则需要在一行中编写整个命令.
与使用反斜杠和&&
everywhere相比,更方便的方法是在任何命令失败时指示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