為什麼沒有命令的編號和魚的時間戳?
在魚中,當我鍵入時,
history | less
我會看到以下範例:history | less export HISTTIMEFORMAT="%h/%d - %H:%M:%S " bash
在 bash 我看到這個:
491 18/04/16 14:31:02 cd 492 18/04/16 14:31:02 ls -l 493 18/04/16 14:31:02 less .bashrc
所以我可以用 !491 再次執行命令,我也可以在我的伺服器上進行審計,但是fish 沒有辦法顯示這個。我還嘗試添加時間和日期,
export HISTTIMEFORMAT="%h/%d - %H:%M:%S "
但什麼也沒有,關於如何在 bash 中添加它的任何想法?
魚跟踪但尚未顯示歷史時間戳。請參閱問題 #677 - 那裡有一些貢獻的腳本來解析歷史文件。
fish 不支持驚嘆號歷史擴展,因為語法很難記住並且經常被錯誤呼叫。您可以關注#288中的討論。你通常做的是開始輸入命令,並在它出現時接受自動建議(右箭頭或 ctrl-F)。另一種選擇是鍵入部分命令並使用向上箭頭循環匹配歷史記錄項。
--show-time
如果您使用參數執行,Fish 現在支持內置歷史命令中的時間戳。(您必須至少使用 2016 年 10 月發布的 fish 2.4 版)
根據您的原始範例,您可以這樣指定格式:
$> history --show-time='%h/%d - %H:%M:%S '
或將其保存到函式中(此處不使用別名,因為 1. recursive 和 2. long):
# ~/.config/fish/functions/history.fish function history builtin history --show-time='%h/%d - %H:%M:%S ' | tail -r end
我將額外的管道添加到尾部反轉,以便它像 bash 一樣自上而下地讀取
history
。將它添加到您的魚功能中,它對您來說應該足夠了。
===
似乎沒有辦法列印“歷史索引”(給定命令對應的“行號”)。作為比較,這是我首選的 bash 歷史記錄格式:
228 01/05/17 14:47:53 $> history 229 01/05/17 14:48:11 $> vim .bash_profile 230 01/05/17 14:48:42 $> source .bash_profile 231 01/05/17 14:48:45 $> history 232 01/05/17 15:15:29 $> ls 233 01/05/17 15:15:30 $> clear 234 01/05/17 15:15:32 $> history
以及我寫這篇文章時相應的魚類歷史:
01/05/17 15:05:53 $> vim history.fish 01/05/17 15:10:01 $> man history 01/05/17 15:14:50 $> history | tail -r | less 01/05/17 15:15:01 $> history | tail -r 01/05/17 15:15:11 $> ls 01/05/17 15:15:14 $> vim history.fish 01/05/17 15:15:41 $> history
坦率地說,它足夠接近誠實。
===
更新:經過一番思考,您可以繼續傳遞結果以獲得這些行號。它不會是完美的(多行命令將被視為輸入的每一行的新“行”),但它為您提供了幾乎所有您想要的魚的 bash 式歷史記錄。這是我的最終
history.fish
文件:function history builtin history --show-time='%m/%d/% %T $> ' | tail -r | less -N +G end
less -N
給出行號,並less +G
從底部開始文件(因此您會自動查看最近的條目)。
tail -r
僅在基於 FreeBSD 的系統(包括 Mac OS X)上兼容,但您可以使用類似的替代品,如 tac(如果您使用的是 GNU coreutils,則可以使用 gtac)。