我是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相关问答推荐

在64位Linux Mint 21.2 Mate上呈现nvim中的文本对象时出现问题

为什么waitpid(2)可以指定非子进程?

Linux 中大型 TSV 的条件编辑

如何在充满 csv 的目录中获得不同的值计数

CMake:处理静态库和共享库的正确方法

构建 python 映像时 Docker compose 问题,访问被拒绝或存储库不存在

树莓派拒绝连接到瓶子服务器

使用 awk 将 csv 拆分为带有标题的多个文件

如何安装脚本以从命令行的任何位置运行?

在没有root访问权限的情况下安装zsh?

用于判断进程是否正在运行并对结果采取行动的 Linux 脚本

何时判断 EINTR 并重复函数调用?

如何将 bash 别名定义为多个命令的序列?

在 mac 上通过 ssh 连接到 amazon aws linux 服务器

何时使用管道与何时使用共享内存

如何在字符串中查找子字符串(或如何 grep 变量)?

zsh:找不到命令 laravel

在 Ubuntu 中学习 OpenGL

区分 Java 线程和 OS 线程?

学习内核编程