各タブで異なるコマンドでxfce-terminalを実行し、コマンドが返された後でもタブを使用できますか?

各タブで異なるコマンドでxfce-terminalを実行し、コマンドが返された後でもタブを使用できますか?

概要を維持するために、私はいつも同じ順序で複数のコマンドを配置し、自動的に一緒に起動するのが好きです(gradle、git、データベース、scala-REPL、jboss...)。

-H(hold) は終了後も端末が閉じられないという意味のようですが、このようなプロセスを意図的に終了するにはどうすればよいでしょうか?別言しますか?これにより、端末を引き続き使用できます。

私はxfce4-terminalとbashでxubuntuを使用しています。複数のコマンドを実行し、そのウィンドウ/タブで作業を続けることができるより良い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はシェルから分離され、独自のウィンドウで実行されるため、-e(実行)パラメータが機能します。 scala-REPLの場合、リストの最後のコマンドなので有効だと思います。

答え1

この-H/-holdオプションは、ターミナルエミュレータウィンドウで起動されたアプリケーション(シェルなど)が終了した後でも、ターミナルエミュレータウィンドウを開いたままにします。その状態ではこれ以上何も起こりません。

xfce4-terminalターミナルエミュレータでインタラクティブシェル操作でコマンドを起動し、シェルの実行を維持し、アプリケーションが終了した後にインタラクティブに使用したい場合は、環境変数を使用してインタラクティブシェルを起動できますbash。最初のプロンプトの前にコマンドが与えられました。$PROMPT_COMMANDxfce-terminal

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 \
  ...

この場合、コマンドは次のようになります。働くこれは、対話型シェルのプロンプトで入力したように一時停止してCtrl-Z後で再起動できることを意味します。fg/bg

$PROMPT_COMMANDにないと仮定します~/.bashrc。また、コマンドの終了状態は にあります$?

シェルプロンプトで入力されたコマンドと同様にするには、履歴リストに追加することもできます。良い:

xfce4-terminal -T /etc/motd -e 'env PROMPT_COMMAND="
  unset PROMPT_COMMAND
  history -s vi\ /etc/motd
  vi /etc/motd" bash'

これにより、終了後にキーを押して同じコマンドを呼び出すviことができます。Upvi

もっと簡単に書く方法:

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"'

他の回答で提供されたソリューションは動作しますが、いくつかの欠点があります。

  1. Ctrl-C実行中にキーを押すと、両方ともcmd1つのプロセスグループしかないため、外部プロセスは終了しますshshcmd
  2. Ctrl-Z一時停止は利用できませんcmd
  3. この方法と同様に、$PROMPT_COMMANDコマンドの終了ステータスはです$?

あなたはそれを解決することができます1上記の作業は、次のように行われます。

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続行できます。PIDcmd

答え2

あなたの質問を理解したら、端末でいくつかのプロセスを実行してCtrl+できるC次のシェルを使用してウィンドウを開いたままにしたいと思います。

私の言葉が正しい場合は、次のコマンドでこれを実行できます。

xfce4-terminal -e "bash -c 'COMMAND; exec bash'"

答え3

xfce4-terminalタブの複数のアプリ

各xfceタブに対話型シェルを追加する

Ctrl+Cタブを使用している場合は、次のトリックを使用してシェルを追加できます。

$ xfce4-terminal -H \
     --tab -T bash -e "bash -c 'top;bash'" \
     --tab -T git  -e "bash -c 'top;bash'"

これにより、次の情報が提供されます。

   タブ付きxfceのss

   上 Ctrl+C を使用する xfce の ss

答え4

シェルを終了しても-H端末は閉じません。このフラグを使用すると、端末は引き続き実行されますが、シェルプロセスは閉じて再開できません。

ターミナルを実行するとすぐに開発環境が始まる状況を成し遂げようとしているようですが?

シェルスクリプトを作成し、その中にすべてのコマンドを入れることができます。スクリプトが終了したら、シェルを起動します。

#!/bin/sh

gradle &
git &
... &
.... &
jboss &

$SHELL

# some cleanup commands if needed

その後、このスクリプトを呼び出しますxfce4-terminal -e /the/script。親プロセス(スクリプト)の終了が$SHELL完了すると、バックグラウンドジョブも終了信号を受信して​​終了します。

それらを生き残るために、nohup jboss &例えばスクリプトで使用します。

関連情報