如何在 shell 打開後打開終端視窗並執行命令?
我想要一個命令或腳本,用 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=''``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
被覆蓋,而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_COMMAND
used 時會執行一次,然後會自行取消設置並恢復原來的PROMPT_COMMAND
.