Bash

從 bash 歷史記錄中刪除最後 N 行

  • March 18, 2022

當不小心將文件粘貼到 shell 中時,它會在 bash 歷史記錄中添加大量醜陋的無意義條目。有沒有一種干淨的方法來刪除這些條目?顯然我可以關閉 shell 並.bash_history手動編輯文件,但也許有某種 API 可用於修改目前 shell 的歷史記錄?

從 開始bash-5.0-alpha,該history命令現在為 delete ( -d) 選項提供一個範圍。請參閱rastafile 的答案

對於舊版本,以下解決方法。


您可以使用history -d offsetbuiltin 從目前 shell 的歷史記錄中刪除特定行,或history -c清除整個歷史記錄。

如果您想刪除一系列行,這並不實際,因為它只需要一個偏移量作為參數,但您可以將它包裝在一個帶有循環的函式中。

rmhist() {
   start=$1
   end=$2
   count=$(( end - start ))
   while [ $count -ge 0 ] ; do
       history -d $start
       ((count--))
   done
}

用 呼叫它rmhist first_line_to_delete last_line_to_delete。(根據輸出的行號history。)

history -w用於強制寫入歷史文件。)

命令提示符中的這一行將有所幫助。

for i in {1..N}; do history -d START_NUM; done

其中 START_NUM 是歷史記錄的起始位置。N 是您可能要刪除的條目數。

前任:for i in {1..50}; do history -d 1030; done

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