2

bashでは、エイリアスで実行された特定のコマンドの終了コードを伝播して、エイリアス呼び出し自体がそれを返すようにしたいと思います(それで終了します)。

次の例を想像してみてください (注意してください: コマンドは意味がありません。私が直面している問題を示しているだけです):

alias cda='cd \/a; exit_code=$?; echo "STATUS: $exit_code"; alias cdb='cd \/b'
cda && cdb

私にとっては、次のようなディレクトリはありませ/a/b。コマンドが失敗することを確認するためです。エイリアスの実行が成功cdbした場合にのみエイリアスを実行したいと思います。cdaただし、echo最後のコマンドと同様にexitステータスで終了しました0=>両方が実行されます

私が試したことは次のとおりです。

alias cda='cd \/a; exit_code=$?; echo "STATUS: $exit_code"; exit $exit_code'; alias cdb='cd \/b'
cda && cdb

ただし、これはシェルを完全に終了します=>私には実行できません。

$exit_codeエイリアスの終了ステータスとして終了ステータス(私の場合)を伝播する方法はありますか?

4

2 に答える 2

1

私はこれを私の中に持っています.bashrc

return_exitcode(){
    return $1
}

必要な終了コードをシミュレートします (入力チェックは行われません)。

これにより、エイリアスは次のようになります。

alias cda='cd /a; exit_code=$?; echo "STATUS: $exit_code"; return_exitcode $exit_code'
alias cdb='cd /b; exit_code=$?; echo "STATUS: $exit_code"; return_exitcode $exit_code'

ノート:

  1. 関数の使用は、エイリアスよりも常に優先されます。したがって、konsoleboxの答えが正解です。
  2. この答えは、この小さな関数が便利な場合があるという理由だけで追加されました;...
于 2013-08-14T07:49:27.807 に答える