端末でコマンドを実行し、追加のコマンドを入力します。

端末でコマンドを実行し、追加のコマンドを入力します。

同じ端末ウィンドウに複数のタブを作成し、そのタブでコマンドを実行するために次のスクリプトを作成しました。

#!/bin/bash
#Use the commands as:
#--tab-with-profile=Default --title=<SPECIFY THE TAB TITLE HERE> -e "bash -ic \"<SPECIFY THE COMMAND YOU WANT TO RUN HERE>; bash\"" \
#The ampersand in the end of this file makes sure that the gnome-terminal command is run as a background process

echo "Setting up simulator environment";
service mysqld start;

gnome-terminal \
  --tab-with-profile=Default --title=PROG1 -e "bash -ic \"clear;ls;./prog1; bash disown\"" \
  --tab-with-profile=Default --title=SIMULATOR -e "bash -ic \"clear;ls;./simulator; bash disown\"" \
  --tab-with-profile=Default --title=PROG2 -e "bash -ic \"clear;ls;./prog2; bash disown\"" \
  --tab-with-profile=Default --title=DATA -e "bash -ic \"./data -f \"/home/user/NetBeansProjects/data3.txt\" -p \"6785\"; bash disown\"" \
  --tab-with-profile=Default --title=PROG3 -e "bash -ic \"cd /home/user/NetBeansProjects/simulator;./prog3; bash disown\"" \
&

問題は、これらのプログラムの1つが実行を終了するか、または停止を押すとCtrl+cタブが閉じられることです。タブを閉じたくありません。タブを開いたままにして、bash端末を表示してタブから別のコマンドを実行できるようにしたいです。。これを行う方法はありますか?

答え1

2つの質問があります。

1つ目は、すべてのbash -icコマンドで(-c上書きのために対話型シェルが生成されないため、削除しても-i安全-iです)bash disown代わりに呼び出すことですbash。これは意味がなく、すぐにエラーが発生するため、対話型シェルはありません。gnome-terminal外部コマンドの終了時に実行され、開いたままになりますbash -c

(また、コマンドの最後にexec bash代わりを使用していくつかのプロセスを保存することもできます。)bash

2番目は、コマンドの最後に対話型シェルを作成する必要がある親インスタンスを含む、終了したプロセスの同じグループ内のすべてのプロセスにCtrl+ SIGINTです。Cbash

この問題を解決するには、組み込み設定を使用してbashSIGINTtrap信号を受信したときにbash生成される他の対話型インスタンスを設定できます。bash

つまり、次のように動作します。

gnome-terminal \
  --tab-with-profile=Default --title=PROG1 -e "bash -c \"trap 'bash' 2; clear;ls;./prog1; exec bash\"" \
  --tab-with-profile=Default --title=SIMULATOR -e "bash -c \"trap 'bash' 2; clear;ls;./simulator; exec bash\"" \
  --tab-with-profile=Default --title=PROG2 -e "bash -c \"trap 'bash' 2; clear;ls;./prog2; exec bash\"" \
  --tab-with-profile=Default --title=DATA -e "bash -c \"trap 'bash' 2; ./data -f \"/home/user/NetBeansProjects/data3.txt\" -p \"6785\"; exec bash\"" \
  --tab-with-profile=Default --title=PROG3 -e "bash -c \"trap 'bash' 2; cd /home/user/NetBeansProjects/simulator;./prog3; exec bash\"" \
&

関連情報