是否有 Perl 的 die
函数的 shell 等价物(在 bash 或 zsh 中)?
我想设置退出代码并在一行中打印一条消息。我知道我可以制作自己的简单功能,但我有点希望内置。
不,你需要两者 echo
和exit
只需像这样创建一个shell
函数:
die() {
[[ $1 ]] || {
printf >&2 -- 'Usage:ntdie <message> [return code]n'
[[ $- == *i* ]] && return 1 || exit 1
}
printf >&2 -- '%s' "$1"
exit ${2:-1}
}
例
die "Oops, there's something wrong!n" 255
解释
- 第一个参数是
- 需要的消息,第二个可选参数是返回码:
-
${2:-1}
是一个 bash 参数扩展:如果缺少第二个参数,它exit 1
- 在 shell 中,
1
与FALSE
相同 (1 => 255) - 在现代 bash 中,
die() { }
是首选的旧function die {}
- 像麦克斯韦一样将 STDERR 重定向到 STDOUT,这不是最佳实践,相反,我直接重定向到 STDERR(就像
perl
一样) - 如果要在交互式 shell 中使用它,请将其放入
~/.bashrc
中,然后source ~/.bashrc
- 如果要在脚本中使用它,可以在脚本中
source ~/.bashrc
或手动放置。 -
[[ $- == *i* ]]
测试您是否在交互式外壳中