Bash history命名配置及使用

2021-06-07 12:09:03 字數 1893 閱讀 8003

歷史是寶貴的財富,當然也包括程式設計的時候。

bash history有多種使用方式,最簡單的方式就是按上下方向鍵。按一次「上」鍵,bash列出上次執行的命令,按兩次,bash則列出再上次執行的命令;按「下」鍵正好相反,bash列出當前命令之後執行過的命令。

方向鍵按幾次還受得了,如果想執行的命令距離太遠,超過了重新輸入一遍的代價,就不值得使用這種方式了。這時我們有兩種選擇:使用history命令或bash內建的查詢功能。

history會列出bash儲存的所有歷史命令,並且給它們編了號,我們可以使用「嘆號接編號」的方式執行特定的歷史命令,如:

$ history

...100 echo "hello, world"

...$ !100

echo "hello world"

hello world

更高效的方式是結合grep的搜尋功能,如:

$ history | grep echo
# 忽略重複的命令

export histcontrol=ignoredups

# 忽略由冒號分割的這些命令

export histignore="[ ]*:&:bg:fg:exit"

# 設定儲存歷史命令的檔案大小

export histfilesize=1000000000

# 儲存歷史命令條數

export histsize=1000000

可怎麼還是有些命令不在歷史裡面呢?原來,bash預設使用覆蓋的方式將執行過的命令寫到檔案裡,包括bash啟動時從歷史命令檔案裡讀出的命令,以及之後執行的命令。更重要的是,寫回的時機是在bash退出時。想想看,如果一先一后啟動兩個bash回出現怎樣的情況?

第乙個bash啟動,讀出100個歷史命令;

之後執行了50條命令

開啟第二個bash,由於前面的bash沒有退出,所以第二個bash唯讀到100條歷史命令

在第二個bash裡面執行10條命令

第乙個bash退出,將150條命令用覆蓋的方式寫回檔案

第二個bash退出,歷史檔案裡只有110條命令!!!

解決方法是使用追加而不是覆蓋的方式將命令寫入檔案,將下面的**放在.bashrc檔案裡即可:

然而,bash只在退出的時候才將新近執行的命令寫回檔案的方式仍然困擾著我們,使得我們在第二個bash裡面不能重用第乙個bash裡面執行的50條命令。解決方法是每執行完一條命令就將其寫回檔案。bash每執行完一條命令,都要顯示乙個新的提示符,而在顯示提示符的同時,會執行儲存在環境變數prompt_command裡面的命令(通常被用來為終端設定標題),利用這一機制,將如下**放入.bashrc檔案裡即可達到目的:

prompt_command="history -a; $prompt_command"
現在,第二個bash啟動時可以讀到150條命令,如果再開第三個bash的話可以讀到160個命令。然而,第乙個bash卻無法重用第二個bash裡面執行的10條命令,因為bash在啟動後不會再去讀歷史檔案了。

將如下**插入.inputrc,會讓搜尋變得更容易。

"\e[a": history-search-backward

"\e[b": history-search-forward

當命令列上沒有輸入時,上下方向鍵的作用和以前一樣,但是當輸入了內容,如

ssh -l

,之後,bash只會列出以該字串

開頭的命令,這樣極大地縮小了搜尋範圍,非常高效。

**:

命令記錄 bash history

原貼 http blog.chinaunix.net u 13329 showart.php?id 84767 命令記錄.bash history bash shell在 bash history 表示使用者目錄 檔案中儲存了500條使用過的命令,這樣可以使你輸入使用過的長命令變得容易。每個在系統中...

善用Bash history 命令

相信大家平時都有用history命令來檢視命令歷史記錄,但是實際上history命令並非只有這個功能,history還有很多有用的功能。尤其是 bash 版本的history命令,它所提供的功能比所有其他的 linux shellhistory命令所提供的都要多。bash 的歷史悠久,是乙個古老的 ...

Shell命令記錄 bash history刪除

bash shell在 bash history 表示使用者目錄 檔案中儲存了500條使用過的命令,這樣可以使你輸入使用過的長命令變得容易。每個在系統中擁有賬號的使用者在他的目錄下都有乙個 bash history 檔案。bash shell應該儲存少量的命令,並且在每次使用者登出時都把這些歷史命令...