zsh
シェルでは、次のようにコマンドライン履歴に何かを書き込むことができます。
#!/bin/zsh
cmd="cd /special/dir"
print -s $cmd" # save command in history for reuse
fish
シェルでこれをどのように実行できますか?
答え1
AFAICT、read
組み込み、およびシェルのコマンドラインリーダーのみが履歴にエントリを追加できますが、stdinがttyデバイスの場合にのみ可能なので、簡単にスクリプトできません。
ただし、以下を使用して項目を手動で追加できます。
function add_history_entry
begin
flock 1
and echo -- '- cmd:' (
string replace -- \n \\n (string join ' ' $argv) | string replace \\ \\\\
)
and date +' when: %s'
end >> $__fish_user_data_dir/fish_history
and history merge
end
それから:
add_history_entry 'cd /special/dir'
これは Fish 3.1.2 以降は動作しますが、fish
少し移動するターゲットであり、API はしばしば 1 つのバージョンと次のバージョンの間で互換性のない方法で変更されることに注意してください。このコンテンツ__fish_user_data_dir
と履歴ファイルの形式は文書化されていないため、将来のリリースで消えるか変更される可能性があります。上記は、$fish_history
変数が以外の値に設定されていないと想定していますfish
。