何らかの理由でzshがprecmd
実行されます。後ろにそれより先に注文を…?
[user@main ~/workspace]$ cat ~/workspace/precmd.sh
echo "Command should start after this line, but it will not"
[user@main ~/workspace]$ precmd () { ~/workspace/precmd.sh }
[user@main ~/workspace]$ command -v vim
/usr/bin/vim
Command should start after this line, but it will not
私はzshrcで試してみましたが、trap '/home/user/workspace/precmd.sh' DEBUG
それも機能しません。
答え1
関数名が少し誤解を招く可能性がありますが、これが意味するところです。
precmd
各プロンプトの前に実行します。類似²bash
$PROMPT_COMMAND
からinfo zsh precmd
:
precmd
各プロンプトの前に実行します。たとえば、既存のジョブに関する通知が表示されたときに発生するコマンドラインが再描画されても、事前コマンド機能は再実行されません。
DEBUG
各コマンドの前に何が起こるのか、トラップ3を参照してください。
プロンプトで入力したコード(を押した後Enter)が解釈される前に実行される操作については、preexec
フック機能を参照してください。
prompt$ precmd() echo precmd; preexec() print -r preexec $1; TRAPDEBUG() print -r debug $ZSH_DEBUG_CMD
debug echo precmd
precmd
prompt$ echo 1; echo 2; echo 3
debug print -r preexec $1
preexec echo 1; echo 2; echo 3
debug echo 1
1
debug echo 2
2
debug echo 3
3
debug echo precmd
precmd
prompt$
debugbeforecmd
DEBUGトラップがコマンドの前(デフォルト)以降に実行されるかどうかを決定するオプションも参照してください。
precmd
/関数を設定する代わりに、独自の関数を定義してその/配列に追加することもできます(トラップにはその項目はありません)。preexec
precmd_functions
preexec_functions
myhook() echo myhook
precmd_functions+=(myhook)
また、見ることができますzsh-add-hook
1名前は、初期変更ログに基づいて1983年頃にKarl Kleinpasteによって追加された同様の機能を持つ名前precmd
から派生しました。tcsh
zshの元の1.0バージョンはprecmd
1990年初頭にリリースされました。
²開発の初期に追加されましたbash
。 1989 1.02にはすでに存在していました。
³ 1980年代のコーンシェル。また、1990年のzshの最初のバージョンでも同様です。