魚の殻の記録にコマンドを書くには?

魚の殻の記録にコマンドを書くには?

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

関連情報