我正在尝试编写一个shell脚本,在命令失败时中止并显示有问题的行号。
set -e
trap 'echo "$0 FAILED at line ${LINENO}"' ERR
原来,陷阱行不能与Ubuntu的默认shell脚本解释器破折号一起使用。如果我将shebang行更改为#!/bin/bash
,则可以使用#!/bin/sh
。有没有办法让这项工作不依赖于bash存在?
顺便说一下,我从破折号得到的错误就是:
trap: ERR: bad trap
答案 0 :(得分:2)
根据互联网上的各种消息来源,ERR不是标准的 所有并且只有Korn Shell支持 - 它似乎发明了它 - 和Bash,似乎采用它。 https://github.com/bmizerany/roundup/issues/25#issuecomment-10978764
我会选择简单的解决方案。
只需更改
#!/bin/sh
到
#!/bin/bash
或更好
#!/usr/bin/env bash
答案 1 :(得分:1)
您可以在退出时设置陷阱并测试退出代码,如下所示:
set -e
trap '[ $? -eq 0 ] && exit 0 || echo "$0 FAILED at line ${LINENO}"' EXIT