実行中のコマンドに関するいくつかの状況情報を追加できるように、関数と一緒にadd-zsh-hook precmdを使用します。
つまり、precmd関数への呼び出しは、前のコマンドが成功したかどうかを確認するためのパラメータや環境変数を提供しないようです。結果によって違う行動ができるという事実を知ることができて嬉しいです。
サンプル:
_after() {
printf 'args:%s\n' "$*" # nothing
printf 'After\n'
# env #: nothing useful here
}
autoload -U add-zsh-hook
add-zsh-hook precmd _after
ベストアンサー1
最後のコマンドの終了ステータスは、通常とを通じてprecmd
フックからアクセスできます。フックの最初のコマンドだけを検索できることを覚えておいてください。 Hookの最初の行に個人パラメータを保存することはまれではありません。$?
$status
$?
precmd
my-precmd-hook() {
local -i code=$?
printf 'exit code of the previous command: %d\n' code
}
autoload -Uz add-zsh-hook
add-zsh-hook precmd my-precmd-hook
現在のドキュメントはあまり良くありませんが、そこにあります。
フック機能
次の関数では、
_functions
添付関数と同じ名前で配列を定義できます。これらの配列のすべての要素は、実行される関数の名前として扱われ、$?
同じパラメータと同じ初期値を使用して基本関数と同じコンテキストで実行されます。
precmd
各プロンプトの前に実行します。
したがって、配列のすべての関数はprecmd_functions
メインフックと同じ方法で実行されます。ドキュメントには、これがメインフックの最後のコマンドのステータスコードと明示的に明示されていませんが、暗黙的です。最後のコマンドの状態でない場合、$?
precmd
$?
precmd
$?
それ文書化する必要があります。
さらに、私たちは以下を見つけました:
シェル関数は、
add-zsh-hook
配列から関数を追加または削除する簡単な方法を提供します。
これはprecmd
、取り付けられたフックもadd-zsh-hook
基本フックと同じ方法で実行されることを意味します。$?
precmd