各タブで異なるコマンドで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

おすすめ記事