以程式設計方式開啟 gnome 終端機並在執行 bashrc 後執行指令

以程式設計方式開啟 gnome 終端機並在執行 bashrc 後執行指令

為了啟動我的開發環境,我編寫了一個小腳本。一部分是打開一個帶有多個選項卡的 gnome 終端,其中應自動執行一些命令。其中一些命令依賴已執行的 .bashrc。但使用時

gnome-terminal --tab -e「指令」--tab --tab

該命令在 .bashrc 執行之前執行。是否有可能使自動 gnome-terminal -e 的行為像手動使用的那樣? (甚至像「cd /foo/bar」這樣的指令也不能與 gnome-terminal -e 一起使用)

答案1

一旦 gnome-terminal 啟動了 bash,就命令執行而言,它就脫離了循環:它只管理輸入和輸出。所以你需要 bash 的配合才能在~/.bashrc加載後運行某些東西。

首先,在很多情況下,您實際上並不需要在~/.bashrc.例如,在特定目錄中開啟終端機可以簡單地使用cd /foo/bar && gnome-terminal.您可以透過類似的方式設定環境變數:VAR=value gnome-terminal。 (如果您~/.bashrc覆蓋環境變量,那麼您就做錯了:環境變數定義屬於~/.profile

要在終端機中執行命令,但在此之前~/.bashrc,您可以執行以下操作

gnome-terminal -x sh -c 'command1; command2; exec bash'

如果您想使用多個選項卡,-e則必須使用-x. Gnome 終端毫無幫助地分割了 at 空間的參數-e,而不是透過 shell 執行它。儘管如此,如果您確保其中不包含空格,則可以編寫 shell 命令。至少在 gnome-terminal 2.26 中,您可以使用製表符(<TAB>用文字製表符替換):

gnome-terminal -e 'sh -c command1;command2;exec<TAB>bash'
gnome-terminal --tab -e 'sh -c command1;<TAB>exec<TAB>bash' \
               --tab -e 'sh -c command2;<TAB>exec<TAB>bash'

如果您確實需要在之後運行命令~/.bashrc,請 make運行命令。例如,在 的末尾包含以下程式碼~/.bashrc

eval "$BASH_POST_RC"

然後在 bashrc 之後(實際上是在末尾)運行一些程式碼:

gnome-terminal -x sh -c BASH_POST_RC=\''command1; command2'\''; exec bash'

或(較少引用)

BASH_POST_RC='command1; command2' gnome-terminal

儘管我不特別建議這樣做,但您可能對中提到的技術感興趣 如何啟動已在命令列上輸入某些文字的終端機?

答案2

當您使用該-e選項時gnome-terminal,將在不啟動新 shell 的情況下執行該命令(您甚至可以運行類似:gnome-terminal -e gedit),因此,如果您想在bash新終端/選項卡中將命令運行到shell 中,則必須執行以下操作:

gnome-terminal -x bash -c "command"

但請注意,當"command"結束時,終端機/選項卡也將結束。

相關內容