d-m*_*man 315 linux command-line
我试图在一行中合并多个linux命令来执行部署操作.例如
cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install
Run Code Online (Sandbox Code Playgroud)
Nik*_* C. 698
如果只想在前一个命令成功的情况下执行每个命令,则使用&&运算符组合它们:
cd /my_folder && rm *.jar && svn co path to repo && mvn compile package install
Run Code Online (Sandbox Code Playgroud)
如果其中一个命令失败,则不会执行其后的所有其他命令.
如果要执行所有命令而不管先前的命令是否失败,请用分号分隔它们:
cd /my_folder; rm *.jar; svn co path to repo; mvn compile package install
Run Code Online (Sandbox Code Playgroud)
在你的情况下,我认为你想要第一种情况,即下一个命令的执行取决于前一个命令的成功.
您还可以将所有命令放在脚本中并执行该命令:
#! /bin/sh
cd /my_folder \
&& rm *.jar \
&& svn co path to repo \
&& mvn compile package install
Run Code Online (Sandbox Code Playgroud)
(行末尾的反斜杠用于防止shell认为下一行是新命令;如果省略反斜杠,则需要在一行中编写整个命令.)
例如myscript,将其保存到文件中,并使其可执行:
chmod +x myscript
Run Code Online (Sandbox Code Playgroud)
您现在可以像机器上的其他程序一样执行该脚本.但是,如果不将其放在PATH环境变量中列出的目录中(例如/usr/local/bin,或在某些Linux发行版上~/bin),则需要指定该脚本的路径.如果它在当前目录中,则使用以下命令执行:
./myscript
Run Code Online (Sandbox Code Playgroud)
脚本中的命令与第一个示例中的命令的工作方式相同; 如果前一个命令成功,则仅执行下一个命令.要无条件执行所有命令,只需在每行命令中列出:
#! /bin/sh
cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install
Run Code Online (Sandbox Code Playgroud)
Dea*_*ean 44
我发现使用; 分离命令只能在前台工作.例如:
cmd1; cmd2; cmd3 & - 只会cmd3在后台执行,而
cmd1 && cmd2 && cmd3 &- 如果没有错误,将在后台执行整个链.
为了满足无条件执行,使用括号解决了这个问题:
(cmd1; cmd2; cmd3) & - 即使任何步骤失败,也会在后台执行命令链.
and*_*rux 10
您可以使用分号分隔命令:
cd /my_folder;rm *.jar;svn co path to repo;mvn compile package install
Run Code Online (Sandbox Code Playgroud)
那是你的意思吗?