時間戳歷史檔案導致歷史命令中出現錯誤行

時間戳歷史檔案導致歷史命令中出現錯誤行

我有 .bash_profile 設定可以匯出到歷史文件:

export HISTFILE=/root/history/.bash_hist-$(who -m | awk '{print $1}')

然後我匯出歷史命令的時間戳記。

export HISTTIMEFORMAT="%Y/%m/%d %T "

這種組合導致紀元時間戳被寫入歷史文件:

#1463962023
top

因此,我在 .bash_profile 中寫入了 perl one liner,僅將人類可讀的時間戳寫入文件中,從而消除了紀元行:(以及其他幾行)

format_history () {
local file=/root/history/.bash_hist-$(who -m | awk '{print $1}')
perl -i -pe 's/^#(\d{10})$/"# ".localtime($1)/e' "$file"
}

shopt -s histappend
PROMPT_COMMAND="history -a;format_history;$PROMPT_COMMAND"

現在我匯出的文件如下所示:

# Sun May 22 19:06:41 2016
last

這太棒了,正是我想要的。但是,這會產生不必要的副作用,即在歷史命令中附加專用行,其中只包含不需要的日期。

 824  2016/05/22 19:07:33 # Sun May 22 19:06:41 2016
 825  2016/05/22 19:07:33 last

如何像我想要的那樣寫入文件而不導致歷史命令報告這些不需要的行?

注意 - 當我登入系統時,歷史命令的這種異常似乎被「啟動」。 (我使用 ssh)我可以在會話中執行 10 個命令,然後運行歷史命令,一切看起來都很正常。但是,一旦登出並重新登入並執行歷史命令,它將顯示錯誤行。

更新:我已將問題範圍縮小到以下行:

PROMPT_COMMAND="history -a;format_history;$PROMPT_COMMAND"

當我註解掉這一行時,歷史命令將按預期工作。然而,這也是對歷史文件進行格式化的命令。我試圖從行中刪除“history -a”部分,留下其餘部分,但這沒有任何區別。如果我將整行註解掉,我如何使用 perl 腳本呼叫檔案的格式?

答案1

我會保留歷史檔案並在prompt_command 處理程序中實作命令記錄。我也會將其寫入私人日誌文件,這樣就不會與歷史文件的其他用法發生衝突,也不會與其他使用者存取 /root 發生問題

相關內容