
我想要一個命令或腳本使用 bash 開啟新的 gnome 終端機視窗並載入歷史檔案並保持開啟狀態。
我搜尋瞭如何打開終端機並在不關閉終端機的情況下執行命令,我找到的答案基本上總結在這個 stackoverflow 答案。
基於這些方法,我嘗試執行以下命令:
gnome-terminal -e "bash -c 'history -r ~/history.txt; exec $SHELL'"
但是,新視窗中顯示的歷史記錄不是history.txt
預設檔.bash_history
.我想,自從history -r
我正在執行的命令bash
以及原始檔案之後.bashrc
,也許.bashrc
正在做一些影響我載入的歷史記錄的事情。
基於此,我嘗試了rcfile
上面連結的答案中的選項,以便我可以在之後包含命令.bashrc
,結果如下rcfile
:
FILE=~/.bashrc && test -f $FILE && source $FILE
history -c && history -r ~/history.txt
但是,當我運行以下命令時:
gnome-terminal -e "bash --rcfile rcfile"
新航站樓中的歷史仍然是 的歷史.bash_history
。如果我將history
命令添加到它rcfile
顯示歷史記錄history.txt
已加載,所以之後的東西rcfile
會覆蓋我載入的歷史記錄。
我還發現如果我取消設定HISTFILE
變數export HISTFILE=''
的末尾rcfile
,的歷史記錄history.txt
不會被覆蓋並有效。但是,我不想取消設置,因為我確實希望在使用新打開的終端時HISTFILE
保存歷史記錄。.bash_history
最後,我-o
在 bash 中找到了這個選項,所以我嘗試用它做我想做的事情。我rcfile
把我的改為:
FILE=~/.bashrc && test -f $FILE && source $FILE
history -c && history -r ~/saved/history.txt
set -o history
並執行以下命令:
bash --rcfile rcfile.txt +o history
我希望運行bash
with+o history
能夠防止歷史記錄history.txt
被覆蓋,而set -o history
中的命令rcfile
會重新啟動 bash 歷史記錄。然而,這也無法按預期工作,因為歷史記錄是來自的歷史記錄history.txt
,但隨後就不再有歷史記錄,我必須手動輸入set -o history
才能使其工作。
所以基本上,我嘗試的一切都讓我回到了同一個問題:如何使用 bash 開啟新終端然後執行命令,就像使用者正在輸入一樣?
另外,我想更了解rcfile
執行後發生了什麼,因為我無法找到任何其他正在取得的相關文件。和有沒有辦法從命令列禁用該行為?
答案1
我設法使用問題中提到的PROMPT_COMMAND
變數和文件找到了解決方法。rcfile.txt
你可以運行命令
gnome-terminal -e "bash --rcfile rcfile.txt"
其中 的內容rcfile.txt
如下:
FILE=~/.bashrc && test -f $FILE && source $FILE
my_init_func() {
# Insert desired commands here. In my case, history -r history.txt
PROMPT_COMMAND=`echo $1`
eval $PROMPT_COMMAND
unset -f $FUNCNAME
}
PROMPT_COMMAND="my_init_func \'$PROMPT_COMMAND\'"
其作用是取得預設值.bashrc
(如果存在),以便保留任何其他終端配置。然後,它定義了一個函數,該函數在調用 bash 中使用的函數時將運行一次PROMPT_COMMAND
,然後將取消自身設定並恢復原始PROMPT_COMMAND
.