3

diePerl の機能に相当するシェル (bash または zsh のいずれか) はありますか?

終了コードを設定し、メッセージを 1 行で出力したいと考えています。独自の単純な関数を作成できることはわかっていますが、組み込みを望んでいます。

4

2 に答える 2

3

echoいいえ、両方が必要です exit

于 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 番目のオプションの引数は戻りコードです:
  • ${2:-1}は bashパラメーター展開です: exit 12 番目の引数が欠落している場合
  • では、(1 => 255)1と同じですFALSE
  • 現代のでは、die() { }古いものとして好まれますfunction die {}
  • Maxwell のようにSTDERRSTDOUTにリダイレクトするのはベスト プラクティスではありません。代わりに、STDERRに直接リダイレクトします (perlそうです) 。
  • インタラクティブシェルで使用したい場合は、これを入れて~/.bashrcからsource ~/.bashrc
  • スクリプトで使用する場合は、スクリプトで使用するか、source ~/.bashrc手動で配置できます。
  • [[ $- == *i* ]]対話型シェルにいるかどうかをテストします
于 2012-12-03T21:52:05.887 に答える