Bash

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

  • October 31, 2016

我想要一個命令或腳本,用 bash 打開一個新的 gnome-terminal 視窗並載入歷史文件並保持打開狀態

我搜尋瞭如何在不關閉終端的情況下打開終端並執行命令,我找到的答案基本上總結在這個 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=''``rcfilehistory.txtHISTFILE``.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被覆蓋,而bashset -o history中的命令rcfile將重新啟動 bash 歷史記錄。但是,這也不能按預期工作,因為歷史是來自history.txt但沒有更多的歷史記錄,我必須手動輸入set -o history它才能工作。

所以基本上,我嘗試的一切都讓我回到了同一個問題:如何使用 bash 打開新終端,然後執行命令,就好像使用者正在輸入它一樣?

此外,我希望更好地了解執行****後發生的情況rcfile,因為我無法找到任何其他相關文件。有沒有辦法從命令行禁用這種行為

我設法使用問題中提到的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_COMMANDused 時會執行一次,然後會自行取消設置並恢復原來的PROMPT_COMMAND.

引用自:https://unix.stackexchange.com/questions/318619