🙌
NushellのHook(フック)について
フック設定
フックを使用すると、規定のタイミングでコードを実行できます。フックははインタラクティブモードでのみ使用できます。
現在、次のタイプのフックをサポートしています。
-
pre_prompt
: コマンドプロンプトが表示される前の時。 -
pre_execution
: 入力されたコマンドが実行される前の時。 -
env_change
: 環境変数が変更された時。 -
display_output
: 標準出力に出力されて、表示される時。
コマンド行を評価する手順は次のとおりです。
-
pre_prompt
フックを確認して実行する -
env_change
フックを確認して実行する - プロンプトを表示してユーザー入力を待つ
- ユーザーが何かを入力して「Enter」を押した後:
pre_execution
フックを確認して実行します。 - ユーザー入力の解析と評価
-
display_output
が定義されている場合は、それを使用してコマンド出力を出力します - 1に戻ります。
デフォルト設定は以下の通り。
hooks: {
pre_prompt: [{
$nothing # replace with source code to run before the prompt is shown
}]
pre_execution: [{
$nothing # replace with source code to run before the repl input is run
}]
env_change: {
PWD: [{|before, after|
$nothing # replace with source code to run if the PWD environment is different since the last repl input
}]
}
display_output: {
if (term size).columns >= 100 { table -e } else { table }
}
}
hooks設定は動的に変更可能です。例えば、表示内容のログを取得したい場合は、次のように変更します。ただし、1コマンドずつのログとなります。追記したい場合はsave
コマンドに-a
オプションをつけます。
❯ let-env config = ($env.config | upsert hooks {
∙ pre_prompt: [{$nothing}]
∙ pre_execution: [{$nothing }]
∙ env_change: {PWD: [{|before, after|$nothing}]}
∙ display_output: { to html --partial --no-color | save --raw /tmp/nu-output.html }
∙ })
なおこの内容ではコマンドの結果はターミナル上には表示されません。hooks
をもとに戻すか、一旦nushell
を再起動させてください。
Discussion