同じ端末ウィンドウに複数のタブを作成し、そのタブでコマンドを実行するために次のスクリプトを作成しました。
#!/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
この問題を解決するには、組み込み設定を使用してbash
SIGINTtrap
信号を受信したときに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\"" \
&