天天看點

bash忽略錯誤繼續執行_這些技巧讓 Bash 指令曆史更加有用 | Linux 中國曆史控制從曆史記錄中删除指令history 指令的經驗教訓

bash忽略錯誤繼續執行_這些技巧讓 Bash 指令曆史更加有用 | Linux 中國曆史控制從曆史記錄中删除指令history 指令的經驗教訓
告訴 Bash 你想要它記住什麼,甚至删除不需要的記錄重寫曆史。
  • 來源:https://linux.cn/article-12381-1.html
  • 作者:Seth Kenlon
  • 譯者:geekpi

(本文字數:2239,閱讀時長大約:2 分鐘)

運作 Bash 的 Linux 終端有内置的曆史記錄,你可以用來跟蹤最近的操作。要檢視你的 Bash 會話的曆史記錄,請使用内置指令 history:

$ echo "foo"foo$ echo "bar"bar$ history  1  echo "foo"  2  echo "bar"  3  history
           

與大多數指令不一樣,history 指令不是檔案系統上的可執行檔案,而是 Bash 的功能。你可以使用 type 指令來驗證:

$ type historyhistory is a shell builtin
           

曆史控制

shell 曆史記錄的行數上限由 HISTSIZE 變量定義。你可以在 .bashrc 檔案中設定此變量。以下将你的曆史記錄設定為 3,000 行,之後将最早的行删除以為最新指令騰出空間,該指令位于清單的底部:

export HISTSIZE=3000
           

還有其他與曆史相關的變量。 HISTCONTROL 變量控制哪些曆史被記錄。你可以在 .bashrc 中寫入下面的行來強制 Bash 排除以空格開頭的指令:

export HISTCONTROL=$HISTCONTROL:ignorespace
           

現在,如果你輸入以空格開頭的指令,那麼它将不會記錄在曆史記錄中:

$ echo "hello"$     mysql -u bogus -h badpassword123 mydatabase$ echo "world"$ history  1  echo "hello"  2  echo "world"  3  history
           

你也可以避免重複的條目:

export HISTCONTROL=$HISTCONTROL:ignoredups
           

現在,如果你一個接着一個輸入兩個指令,曆史記錄中隻會顯示一個:

$ ls$ ls$ ls$ history  1  ls  2  history
           

如果你喜歡這兩個忽略功能,那麼可以使用 ignoreboth:

export HISTCONTROL=$HISTCONTROL:ignoreboth
           

從曆史記錄中删除指令

有時你會犯一個錯誤,在 shell 中輸入了一些敏感内容,或者你​​隻是想清理曆史記錄,以便它更準确地表示讓某件事正常工作所采取的步驟。如果要從 Bash 的曆史記錄中删除指令,請在要删除的項目的行号上使用 -d 選項:

$ echo "foo"foo$ echo "bar"bar$ history | tail  535  echo "foo"  536  echo "bar"  537  history | tail$ history -d 536$ history | tail  535  echo "foo"  536  history | tail  537  history -d 536  538  history | tail
           

要停止添加 history 條目,隻要在 HISTCONTROL 環境變量中有 ignorespace,就可以在指令前添加空格:

$  history | tail  535  echo "foo"  536  echo "bar"$  history -d 536$  history | tail  535  echo "foo"
           

你可以使用 -c 選項清除所有會話曆史記錄:

$ history -c$  history$
           

history 指令的經驗教訓

操縱曆史通常沒有聽起來那麼危險,尤其是當你有目标地管理它時。例如,如果你要記錄一個複雜的問題,通常最好使用會話曆史來記錄指令,因為通過将指令插入曆史記錄,你能運作它們并進而測試過程。很多時候,不執行曆史指令會導緻忽略小的步驟或寫錯小細節。

按需使用曆史會話,并明智地控制曆史記錄。享受曆史修改吧!