我试图在一行中合并多个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

Linux相关问答推荐

Linux x86_64上PIE ELF可执行文件的.Text段的基本虚拟地址

BASH-SCRIPT-在特定行合并两个文件

如何注释掉SLURM中的延迟调度命令?

在c++编译期间,什么是linux命令,它给出了链接库的路径?

通过shell 脚本基于AM/PM对日期时间字段进行排序

如何在 shell 脚本中自定义 SFTP 详细输出

重新运行时避免 Linux bash 脚本中的文件重命名重复

使用ansible配置Linux VM使用vmware_vm_shell模块时变成su?

如何使用 Golang 清除终端中的最后一行

使用 AWK 过滤 Linux 输出

如何删除文件中不需要的字符(使用 shell 脚本)

nohup 是否可以跨管道工作?

为什么 fork() 在 setsid() 之前

使用 Scp 时防止覆盖文件

如何在 Linux 中查找所有以 .rb 结尾的文件?

使用inotify的正确方法是什么?

如何从 shell 确定当前的 CPU 利用率?

使用 Bash 查找和复制文件

PostgreSQL psql 终端命令

如何通过 xmllint 使用 XSD 验证 XML 文件