Ele*_*ito 7 error-handling bash shell dash-shell
我正在尝试编写一个 shell 脚本,该脚本在命令失败时中止并显示有问题的行号。
set -e
trap 'echo "$0 FAILED at line ${LINENO}"' ERR
Run Code Online (Sandbox Code Playgroud)
结果发现陷阱行不适用于 Ubuntu 的默认 shell 脚本解释器 dash。如果我将 shebang 行更改#!/bin/bash为此有效但不使用#!/bin/sh. 有没有办法在不依赖 bash 的情况下完成这项工作?
顺便说一句,我从破折号得到的错误是这样的:
trap: ERR: bad trap
Run Code Online (Sandbox Code Playgroud)
ewa*_*att 10
您可以在退出时捕获并测试退出代码,如下所示:
set -e
trap '[ $? -eq 0 ] && exit 0 || echo "$0 FAILED at line ${LINENO}"' EXIT
Run Code Online (Sandbox Code Playgroud)
根据互联网上的各种消息来源,ERR 根本不是标准,只有 Korn Shell(似乎发明了它)和 Bash(似乎采用了它)支持。 https://github.com/bmizerany/roundup/issues/25#issuecomment-10978764
我会选择简单的解决方案。
只需改变
#!/bin/sh
Run Code Online (Sandbox Code Playgroud)
到
#!/bin/bash
Run Code Online (Sandbox Code Playgroud)
或更好
#!/usr/bin/env bash
Run Code Online (Sandbox Code Playgroud)