Linux

bash:帶有歷史 -d 的函式不會刪除歷史條目

  • October 4, 2022

看了一些文章,想不通怎麼進來history -d 1的一個函式不刪除條目。

下面的函式直接進入命令行:

function test () {
 echo "HISTFILE: '${HISTFILE}'"
 history -d 1
}

然後我們執行:

history -c
echo "to remove"
history
   1  echo "to remove"
   2  history
echo $(test)
HISTFILE: '/home/user/.bash_history'
history
   1  echo "to remove"
   2  history
   3  echo $(test)
   4  history

關於它如何不刪除歷史的第一個條目的任何想法?

該函式(順便說一句,它重載了標準實用程序的名稱,因此您可能應該更改它)正在命令替換(一個單獨的子shell)中執行。

在子shell 中,它刪除了第一個歷史記錄條目。但是,它不會影響呼叫 shell 的歷史。

首先,將函式重命名為除此之外的其他名稱test(這不會修復錯誤,但test已經是標準實用程序),然後停止使用echo $(some-command)以輸出命令或函式的輸出。這是一個有幾個問題的反模式。直接使用函式名即可;它已經在做自己的輸出了。

除了echo不需要命令替換之外,echo如果輸出包含反斜杠,則可能會更改命令輸出。不帶引號的命令替換還會導致 shell 將命令輸出拆分為空格、製表符和換行符( 中的任何字元$IFS),並將文件名萬用字元應用於拆分的單詞。然後,該echo實用程序將在一行上輸出所有生成的單詞,它們之間有空格。

有關的:

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