bash 腳本刪除歷史記錄中的最後 10 行

bash 腳本刪除歷史記錄中的最後 10 行

我想製作一個 bash 腳本來刪除我所做的歷史記錄中的最後 10 行,但我仍然收到錯誤

#!/bin/bash
i= history | wc -1
j= $i-10
for x in {$i..$j}
do
  history -d $x
done

我不知道出了什麼問題,有什麼想法嗎?

答案1

有幾個錯誤。

我=歷史|廁所-1

這裡有空格,因此需要將其括在“”中以避免錯誤,此外,您還在等號後添加了不需要的空格。然而,您所做的只是建立一個包含“history | wc -1”的變數。首先,不存在「wc -1」。我認為你的意思是“wc -l”,它計算行數。其次,我認為您想實際運行這個命令。

你可以使用:

i=$(歷史| wc -l)

但是,結果始終為 0,因為您處於子 shell 中。

j=$i-10

您在等號後面新增了一個空格。您可以使用“j=$i-10”,但這實際上不會做任何數學運算。

嘗試類似的方法:

j=$(回顯 "${i}-10" | bc -l)

您可能想要寫一個 if 語句來處理 i 等於或小於 10 的情況。

嘗試類似的方法:

如果[[“$i”-lt“11”]];然後j=“1”;菲
對於 {$i..$j} 中的 x

您不能在這裡使用變數。結果將是 #..# 而不是數字列表。您可以透過建立單行 for do done 語句來解決此問題,該語句將回顯到變數中,然後使用 eval 實際執行它。這樣,當命令運行時,$i 和 $j 將已經被替換為實際數字。

最終儘管,整個方法毫無意義,因為當您在 shell 腳本中執行 History 命令時,計數結果將為零,因為您位於子 shell 中,而子 shell 不會報告其歷史記錄。要明白我的意思,請執行幾個命令,然後執行此腳本:

#!/bin/bash
歷史|廁所-l

可以看到,結果是0。因為它是子shell的歷史記錄,而子shell不報告歷史記錄。即使在歷史命令之前添加其他命令到腳本中,結果也將是 0。

重來。查看直接編輯歷史文件正如@kos所建議的。請記住,在 shell 退出之前,目前 shell 中的命令不會寫入檔案。

祝你好運。

相關內容