zshの特殊関数で有名なのはchpwd()。ディレクトリが変わった時に必ず実行される関数っすね。マニュアルを見てたら他にも似たようなフック機能をもった関数があったので列記します
ちなみに関数の定義はシェル上でもやれます。テスト用のワンライナーとかじゃないと書きにくいけど。
hiroya /Users/hiroya $ hello zsh: command not found: hello #未定義 hiroya /Users/hiroya $ hello(){ echo 'Hello,World'} #定義 hiroya /Users/hiroya $ hello Hello,World
初期化したい時は hoge(){} と空の関数でオーバーライドすればOK
zshの特殊関数
- periodic
If the parameter PERIOD is set, this function is executed every $PERIOD seconds, just before a prompt.
PERIOD変数を設定すると、コマンド実行前に $PERIOD秒ごとに実行される関数 とある。試したけど、よく分からん。
- precmd
Executed before each prompt.
コマンド実行前に実行されるコマンド。preexecとの違いは シェルが命令を展開する前である という点なのかな
- preexec
Executed just after a command has been read and is about to be executed. If the history mechanism is active, the string to be executed is passed as an argument.
コマンドが解釈されて、実行する直前に呼び出される
- TRAPNAL
If defined and non-null, this function will be executed whenever the shell catches a signal SIGNAL, where NAL is a signal name as specified for the kill builtin. The signal number will be passed as the first parameter to the function.
If a function of this form is defined and null, the shell and processes spawned by it will ignore SIGNAL.
シグナルをトラップ時に実行される。TRAPNALのNALの部分をシグナル名に書き換えろとあります
- TRAPDEBUG
Executed after each command.
コマンド実行後に呼び出されます
- TRAPEXIT
Executed when the shell exits, or when the current function exits if defined inside a function.
シェルをexitするとき
- TRAPZERR
Executed whenever a command has a non-zero exit status. However, the function is not executed if the command occurred in a sublist followed by `&&' or `||'; only the final command in a sublist of this type causes the trap to be executed.
コマンドのステータスが0以外の時に実行される