如何打開終端機視窗並在 shell 開啟後執行命令?

如何打開終端機視窗並在 shell 開啟後執行命令?

我想要一個命令或腳本使用 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

我希望運行bashwith+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.

相關內容