我是shell脚本的noob.如果命令失败,我想打印一条消息并退出脚本.我试过:

my_command && (echo 'my_command failed; exit)

但它不起作用.它会继续执行脚本中这一行之后的指令.我正在使用Ubuntu和bash.

推荐答案

try :

my_command || { echo 'my_command failed' ; exit 1; }

四个变化:

  • &&换成||
  • { }代替( )
  • exit;之后引入;
  • {之后和}之前的空格

由于要打印消息并仅在命令失败时退出(以非零值退出),因此需要||而不是&&.

cmd1 && cmd2

cmd1成功时将运行cmd2(退出值0).在哪里

cmd1 || cmd2

cmd1失败时将运行cmd2(退出值非零).

使用( )会使其中的命令在sub-shell中运行,从那里调用exit会使您退出子shell而不是原始shell,因此在原始shell中继续执行.

要克服这个问题,请使用{ }

最后两个更改是bash所必需的.

Linux相关问答推荐

awk:try 将时间戳字符串转换为unix纪元时间

当页面对齐关闭时,x86—64上的对象中的成员初始化器的Clang代码生成错误?

我使用Windows 10,但我无法在我的WSL2上下载vscode

无法下载Centos 7上的存储库的元数据

Git在某些文件中添加回车符,尽管autocrlf已关闭

跨多台计算机管理用户配置文件

如何使用完整路径或文件名显示 grep 结果

用于将文件夹从本地计算机复制到远程服务器的 scp 命令语法

Linux 应用程序分析

diff 命令仅获取不同行的数量

Linux 上的 C++ 开发 - 我从哪里开始?

为什么 mmap() 比顺序 IO 快?

如何从 linux 的命令行将 Sublime Text 2 文件打开到选项卡,而不是新窗口

我可以在 Ubuntu 上使用 Homebrew 吗?

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

从文本文件中删除奇数行或偶数行

Anaconda:禁用提示更改

在 shell 脚本的 for 循环中迭代行而不是单词

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

如何将所有文件从一个目录移动(和覆盖)到另一个目录?