Command-History

如何在fish shell中編寫歷史命令?

  • January 30, 2021

zshshell 中,我可以像這樣在命令行歷史記錄中寫入一些內容:

#!/bin/zsh
cmd="cd /special/dir" 
print -s $cmd"        # save command in history for reuse

我怎麼能在fish外殼中做到這一點?

AFAICT,只有read內置和 shell 命令行閱讀器才能將條目添加到歷史記錄中,但只有當 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 here,但請注意,這fish是一個移動目標,API 經常以不兼容的方式在一個版本和下一個版本之間更改。這__fish_user_data_dir和歷史文件的格式沒有記錄,因此它們可能會在未來的版本中消失/更改。以上還假設$fish_history變數未設置為fish.

引用自:https://unix.stackexchange.com/questions/631733