3

diePerl 的函数是否有等效的 shell(在 bash 或 zsh 中) ?

我想设置退出代码并在一行中打印一条消息。我知道我可以制作自己的简单功能,但我有点希望内置。

4

2 回答 2

3

不,你需要两者 echoexit

于 2012-12-03T20:26:37.540 回答
2

只需制作这样的shell功能:

die() {
    [[ $1 ]] || {
        printf >&2 -- 'Usage:\n\tdie <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如果缺少第二个参数
  • 中,1FALSE(1 => 255)相同
  • 在现代中,die() { }首选旧的function die {}
  • 像 Maxwell 一样将STDERR重定向到STDOUT不是最佳做法,相反,我直接重定向到STDERR(就像这样perl做)
  • 如果你想在交互式 shell中使用它,把它放进去~/.bashrc然后source ~/.bashrc
  • 如果你想在脚本中使用它,你可以source ~/.bashrc在你的脚本中或者手动放置。
  • [[ $- == *i* ]]测试您是否在交互式外壳中
于 2012-12-03T21:52:05.887 回答