7

我正在尝试编写一个 shell 脚本,该脚本在命令失败时中止并显示有问题的行号。

set -e
trap 'echo "$0 FAILED at line ${LINENO}"' ERR

原来陷阱行不适用于 Ubuntu 的默认 shell 脚本解释器破折号。如果我将 shebang 线更改#!/bin/bash为此工作,但不使用#!/bin/sh. 有没有办法在不依赖 bash 存在的情况下完成这项工作?

顺便说一句,我从破折号得到的错误是:

trap: ERR: bad trap
4

2 回答 2

4

您可以在退出时捕获并测试退出代码,如下所示:

set -e
trap '[ $? -eq 0 ] && exit 0 || echo "$0 FAILED at line ${LINENO}"' EXIT
于 2019-10-09T05:19:20.023 回答
3

根据互联网上的各种消息来源,ERR 根本不是标准的,只有 Korn Shell (似乎是它的发明者)和 Bash 支持,它似乎采用了它。 https://github.com/bmizerany/roundup/issues/25#issuecomment-10978764

我会选择简单的解决方案。

简单地改变

#!/bin/sh

#!/bin/bash

或更好

#!/usr/bin/env bash
于 2015-07-25T18:49:42.997 回答