如何在每個選項卡上使用不同的命令執行 xfce-terminal 並在命令返回後繼續使用選項卡?
為了保持概述,我喜歡將多個命令始終以相同的順序放置並自動一起啟動它們(gradle、git、數據庫、scala-REPL、jboss…)
-H (hold) 似乎意味著終端在終止後沒有關閉,但是我如何故意終止這樣的過程呢?一點也不?這樣我就可以繼續使用終端了。
我將 xubuntu 與 xfce4-terminal 和 bash 一起使用。是否有更好的 GUI 解決方案來啟動多個命令,並能夠繼續在該視窗/選項卡中工作?
**更新:**如果您不知道這些命令:Jboss 和 gradle 不斷產生輸出,您不希望在同一個終端中混合使用。有時他們需要用 ^C 打斷,然後重新啟動。我不喜歡重新打開 xfce4-term 並導航到我需要操作的目錄。
數據庫和 scala-REPL 是互動式的,所以在後台啟動它們是沒有意義的。
我目前的啟動腳本只是導航到所需的目錄,並以正確的順序打開所有選項卡以始終在同一位置找到它們,並為其命名每個選項卡:
xfce4-terminal -T eclipse --working-directory=/home/stefan/oximity -e "/opt/eclipse/eclipse" \ --tab -T arandr --working-directory=/home/stefan/oximity -e "arandr /home/stefan/.screenlayout/oximity.sh" \ --tab -T bash --working-directory=/home/stefan/oximity \ --tab -T gradle --working-directory=/home/stefan/oximity/med \ --tab -T git --working-directory=/home/stefan/oximity/med \ --tab -T mysql --working-directory=/opt/mini/mysql \ --tab -T jboss --working-directory=/opt/mini/jboss \ --tab -T jboss-log --working-directory=/opt/mini/jboss/standalone/log \ --tab -T scala-REPL --working-directory=/home/stefan/proj/mini/forum -e /opt/scala/bin/scala
Eclipse 和 arandr 與 shell 分離並在它們自己的視窗中執行,因此 -e(執行)參數有效。我認為對於 scala-REPL 它是有效的,因為它是列表中的最後一個命令。
選項是在其中
-H/-hold
啟動的應用程序(shell 或其他)退出後保持終端仿真器視窗打開。在那種狀態下,不會再發生任何事情了。如果您想在 xfce4-terminal 終端仿真器中將命令作為互動式 shell 的作業啟動並保持 shell 執行並在應用程序退出後以互動方式使用它
bash
,您可以使用$PROMPT_COMMAND
環境變數xfce-terminal
啟動在第一個提示符之前啟動給定命令的互動式 shell。xfce4-terminal \ -T eclipse \ --working-directory=/home/stefan/oximity \ -e 'env PROMPT_COMMAND="unset PROMPT_COMMAND; /opt/eclipse/eclipse" bash' \ \ --tab -T arandr \ --working-directory=/home/stefan/oximity \ -e 'env PROMPT_COMMAND="unset PROMPT_COMMAND; arandr /home/stefan/.screenlayout/oximity.sh" bash' \ \ --tab -T bash \ --working-directory=/home/stefan/oximity \ ...
這樣,命令是該 shell 的作業,這意味著您可以暫停它們
Ctrl-Z
並稍後恢復它們,fg/bg
就像您在該互動式 shell 的提示符下輸入它們一樣。這假設您沒有
$PROMPT_COMMAND
在~/.bashrc
. 另請注意,該命令的退出狀態在$?
.為了使它更像是在 shell 提示符下輸入的命令,您甚至可以將其添加到歷史列表中。像:
xfce4-terminal -T /etc/motd -e 'env PROMPT_COMMAND=" unset PROMPT_COMMAND history -s vi\ /etc/motd vi /etc/motd" bash'
這樣,一旦退出
vi
,您就可以按Up
鍵來呼叫相同的vi
命令。更簡單的寫法:
PROMPT_COMMAND='unset PROMPT_COMMAND; history -s "$CMD"; eval "$CMD"' \ xfce4-terminal --disable-server \ -T /etc/motd -e 'env CMD="vi /etc/motd" bash' \ --tab -T top -e 'env CMD=top bash'
這:
xfce4-terminal -e 'sh -c "cmd; exec bash"'
其他答案中給出的解決方案有效,但有一些缺點:
- 如果在執行時按下
Ctrl-C
,cmd
則會殺死外部,因為和sh
都只有一個程序組。sh``cmd
- 你不能
Ctrl-Z
用來暫停cmd
- 與該
$PROMPT_COMMAND
方法一樣,命令的退出狀態在$?
.您可以通過以下方式解決上述問題:
xfce4-terminal -e 'sh -c "trap : INT; cmd; exec bash"'
或者:
xfce4-terminal -e 'sh -ic "cmd; exec bash"'
使用後一個,您還可以使用 暫停該過程
Ctrl-Z
,但您將無法使用fg/bg
它。您可以通過kill -s CONT
對*.*cmd