為了啟動我的開發環境,我編寫了一個小腳本。一部分是打開一個帶有多個選項卡的 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"
結束時,終端機/選項卡也將結束。