2015-10-06 57 views
4

如果你有10個xterm打開,比方說,可以搜索所有以某種方式組合的bash歷史?是否有可能搜索所有bash歷史

我可以做

history|grep something 
每一個

分開,但我有時會想避免這種情況。

回答

5

我打算假設這些xterm窗口都是針對相同的userid,並且都在同一個主機上。如果它們不是全部相同的用戶,那麼您必須更改其歷史文件位置以使用相同的歷史文件。如果您需要執行此操作,請參閱此線程:https://superuser.com/questions/760830/how-do-i-change-the-bash-history-file-location

但是,您將遇到的主要問題是bash僅在關閉shell時將其歷史記錄寫入.bash_history。但是,您可以編輯.bashrc寫最近的命令.bash_history immeditately,就像這樣:

# When the shell exits, append to the history file instead of overwriting i 
shopt -s histappend 

# After each command, append to the history file and reread it 
export PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}history -a; history -c; history -r" 

請參閱此鏈接的詳細信息:https://unix.stackexchange.com/questions/1288/preserve-bash-history-in-multiple-terminal-windows

+1

爲什麼出口?新產生的shell將重新讀取bash配置文件,並且從bash產生的進程不需要知道你的bash設置是什麼。 – PSkocik

+0

謝謝。是的,所有的xterm窗口都是相同的userid,並且都在同一個主機上 – eleanora

+0

@PSkocik再次閱讀導出命令上方的註釋。它不是關於bash配置文件,它關於獲取最近的歷史。 – R4F6

2

Bash有內存的歷史和歷史文件( $HISTFILE,~/.bash_history)。默認情況下,所有的bash會話共享一個歷史文件,每當bash shell退出時,該文件都會通過最後退出的bash shell的內存歷史記錄獲取。

您可以覆蓋與追加改變行爲:

shopt -s histappend 

並且可以手動調用此與

history -a #-a stands for append 

傾銷我做的是我有history -a作爲我PROMPT_COMMAND這樣的一部分每個新提示行都會在全局歷史記錄文件中添加一條新記錄。

然後,每當我需要從其他會話歷史,我只是全球歷史文件加載到內存中的歷史與:

history -r 

-r讀取歷史文件並追加內容歷史

history命令的說明書就help history和更多有關歷史細節讀在man 1 bash

除了設置shopt -s histappend和添加history -aPROMPT_COMMAND,它也是有用的大小(HISTFILESIZE,HISTSIZE)設置爲一些大的價值和HISTCONTROL,例如到"ignoreboth:erasedups"以消除重複。

此外,我覺得Ctrl-R是一個更舒適的方式來搜索歷史。

相關問題