Command-History

為什麼沒有命令的編號和魚的時間戳?

  • January 6, 2017

在魚中,當我鍵入時,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)。

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