web-dev-qa-db-ja.com

複数のターミナルタブを開いてコマンドを実行する

複数の端末タブを開き、タイトルを付け、ディレクトリに移動し、各タブでコマンドを実行する必要があります。

私はLinuxおよびシェルスクリプトを初めて使用します。オンラインで検索し、いくつかのソリューションを確認した後、このスクリプトを作成しました(編集以下の回答に基づいて):

#!/bin/bash

cd /media/Extra/Project

tab=" --tab-with-profile=Default"
options=(--tab --title=Terminal)

cmds[1]="'Rails s'"
titles[1]="Server"

cmds[2]="'Rails c'"
titles[2]="Console"


for i in 1 2; do
  options+=($tab --title="${titles[i]}"  -e "bash -c \"${cmds[i]} ; bash\"" )          
done

gnome-terminal "${options[@]}"


exit 0

タブを開いて名前を付けますが、このエラーを生成するコマンドの実行に失敗します。

この端末の子プロセスの作成中にエラーが発生しました

もう1つの欠点は、実行中のコマンドを停止するとタブが閉じることです。これは望ましくありません。コマンドを停止して、同じタブ内で再度実行できるようにする必要があります。

スクリプトの何が問題になっていますか?それを行う別の簡単な方法はありますか?

注:コマンドから(-e "\" bash -c $ {cmds [i]}; bash\"")部分を削除すると、指定したディレクトリのタブが開き、エラーなしで名前が付けられます。

-編集-1:

以下の@Tuknutxの回答を適用してスクリプトを編集した後、エラーは表示されなくなりましたが、bash: Rails c: command not foundおよびRails sは_を開始する代わりに新しいRailsアプリを作成しますRailsサーバー。このフォルダーにアクセスしたら、.rmvrcを使用してgemsetを選択します。

9
Brary

tmuxtmuxinator と共に使用することをお勧めします。これはあなたのために仕事をしてくれますし、terminatorレイアウトにも頼ることができます!

terminatorレイアウトチェックアウトの場合mhnagaokaの答え ここ askubuntuも:

  1. レイアウトを設定したら、ターミナルの背景を右クリックして、PreferencesLayoutsタブをクリックして、Addボタンをクリックします。

  2. 名前を付けて、Closeを押します。

  3. これにより、前述の~/.config/terminator/configファイルが作成されます。

  4. terminator -l yourLayoutyourLayoutをステップ2で選択したものに置き換えます)を使用して、保存されたレイアウトを使用してターミネーターを開始できます。

  5. (オプション)~/.config/terminator/configというファイルを編集して、[layouts]とその下にネストされるように[[yourLayout]]、名前を変更しますyourLayoutdefaultに変更し、以前のdefaultレイアウトを削除/名前変更します。これで、Terminatorがパラメータなしで起動すると、カスタム[[default]]レイアウトが読み込まれます!

3
Islam Azab

他のいくつかの回答とそれらのコメントを要約するために、ここに私が結んだものがあります:

#!/bin/bash

cd /path/of/my/stuff

tab=" --tab"
options=()

cmds[1]="echo Banana"

cmds[2]="echo Cat"


for i in 1 2; do
options+=($tab -e "bash -c '${cmds[i]} ; bash'" )
done

gnome-terminal "${options[@]}"

exit 0

「マスター」タブ、プロファイル、およびタイトル(gnome-terminalで非推奨のように見える)を削除したことに注意してください。

2
Ian Hincks

-eオプションに指定する引数は、引用符を含む"bash -c command; bash"です。その文字列全体をコマンドの名前として解釈します!代わりにこれを試してください:-e "bash -c 'command ; bash'"。このようにして、ターミナルウィンドウで実行されるのはcommandであり、その実行後に、娘のシェルが与えられます。ちなみに、'command & bash';と言うこともできます。これにより、バックグラウンドでコマンドが実行され、娘のシェルがすぐに表示されます。

1
Silvio Levy

これを試して:

options+=($tab --title="${titles[i]}"  -e "bash -c \"${cmds[i]} ; bash\"" ) 

そうでない場合、-eの後の式全体がコマンドとして解釈されます。

.bashrcのエイリアスを含めるには、cの代わりに-icを使用します

1
TuKsn