web-dev-qa-db-ja.com

ターミナルウィンドウを開いてコマンドを実行するスクリプトを作成するにはどうすればよいですか?

Ubuntuマシンを起動するときに実行する必要がある3つのスクリプトがあり、それらは開発環境で使用するサービスを開始します。

そのためには、3つのターミナルを手動で開き、コマンドを入力します。

3つのターミナルを開き、それぞれで1つのコマンドを実行するスクリプトを作成する方法はありますか? (各コマンドは別のターミナルウィンドウに表示されるため、出力を確認できます)。

138
JSBach
gnome-terminal -e command

または

xterm -e command

または

konsole -e command

かなり

terminal -e command

コマンドの終了時に端末を維持するには:

Konsoleには--nocloseフラグがあります。

Xtermには、-holdフラグがあります。

gnome-terminalで、編集-> プロファイル設定-> タイトルに移動します。 Commandタブをクリックします。 コマンドの終了時というラベルの付いたドロップダウンメニューから[端末を保持]を選択します。そのための新しいプロファイルを作成し、次のコマンドで実行する必要があります

gnome-terminal --window-with-profile = NAMEOFTHEPROFILE -e command
135
nickguletskii

gnome-terminalkonsoleなどをハードコーディングする代わりに、代替システムを使用します。デフォルトのターミナルエミュレータを実行するプログラムは次のとおりです。

x-terminal-emulator

私のシステムでは、このコマンドを実行するたびにKonsoleの新しいインスタンスが開かれます。

幸いなことに、端末はコマンドを実行するための-eオプションをサポートしているようです(konsoleおよびgnome-terminalについて検証しました)。コマンドの後の引数は、呼び出されたコマンドに渡されます。 Bashは端末で開いたままにすることを拒否します。端末を取得するには追加のスクリプトが必要です。

#!/bin/sh
"$@"
exec "$Shell"

前のスクリプトを/home/user/hackyとして保存して実行可能にした場合、スクリプトを次のように実行します。

x-terminal-emulator -e /home/user/hacky your-script optional arguments here

完全なパスが必要であり、/home/user/hackyは実行可能でなければなりません。

スクリプトを新しいターミナルウィンドウで実行しようとする以前の試みは、 リビジョン#2 にあります。これは、引数がx-terminal-emulatorに渡されることに気付く前のことです。

57
Lekensteyn

非常に単純に-

#!/bin/bash

/etc/init.d/ccpd status

これは、端末に何も表示する必要のない他のコマンドには十分です。ただし、ここではステータスを表示する必要があります。
そのため、ターミナルウィンドウで実行する必要があります

#!/bin/bash

gnome-terminal -e "/etc/init.d/ccpd status"  --window-with-profile=NAMEOFTHEPROFILE

他の投稿 プレースホルダーになることを意図した[]

ここで、「NAMEOFTHEPROFILE」は、「コマンドの終了時に端末を保持する」プロファイルの名前に置き換えられます。

enter image description here

enter image description here

9
Karthik T

@ nickguletskii's answer 、および彼の回答の下にある私自身のコメントによって支援され、@ grabantotの私のコメントへの賛成に触発されて、特に端末を開いたままにしておきたい場合、これを行うための好ましい方法がありますその後、手動で使用できます。

例使用法:これは、スタートアッププログラムに追加してこのスクリプトを実行し、ターミナルを開き、ターミナルでタブを作成して名前を付け、コマンドを実行するのに非常に便利です。または、このスクリプトへのシンボリックリンクをデスクトップに追加することもできます。このタイプのアプローチを使用して、デスクトップ上の単一のアイコンをダブルクリックし、多数のターミナル(これから行う作業に応じて名前が付けられたさまざまなタブ)とセットアップするプログラムを開きます。たとえば、毎日の仕事のためのプログラミング環境。

これは、1つのタブを開いて「test」というタイトルを付け、その中にcd /etc; lsという単純なコマンドを実行する、不自然な例です。最後の$Shell部分はシェルを開いたままにするので、出力を確認して使用し続けることができます(スタックオーバーフローのどこかでこれを学びました)。

gnome-terminal --tab --title="test" --command="bash -c 'cd /etc; ls; $Shell'"

同じgnome-terminalで3つの個別のタブを開くより複雑な例です。これはまさにデスクトップショートカットの種類なので、一度にたくさんのプログラミングウィンドウを開くことができます。

gnome-terminal --tab --title="tab 1" --command="bash -c 'cd /etc; ls; $Shell'" --tab --title="tab 2" --command="bash -c 'cd ~; ls; $Shell'" --tab --title="tab 3" --command="bash -c 'cd ~/temp3; ls; $Shell'"

上記のコマンドの内訳は次のとおりです。

  • gnome-terminal = gnome-terminalを開きます
  • --tab =次に来るもののためのユニークなタブを開く
  • --title="tab 1" =このタブに「タブ1」というタイトルを付けます
  • --command="bash -c 'cd /etc; ls; $Shell'" = bash -c 'cd /etc; ls; $Shell'コマンドを実行します。これは、例として作成したコマンドです。これが何をするかです:
    • bash -cはbash 'c'ommandであると言います
    • cd /etc = 'c'hange' d'irectoryを "/ etc"パスに入れる
    • ls = 'l'iはこのディレクトリのコンテンツではありません
    • $Shell =シェルを開いたままにして作業できるようにするには、この不可解なtidbitが必要です。シェルを開きたい場合は、コマンドを実行してから閉じ、この部分を削除します。ただし、タブを開いたままにしておき、プログラミングの魔法をかけることができます。 :)
  • 次に--tabの部分に戻ってタブ2を生成し、タブ3を生成します。心のコンテンツに合わせてカスタマイズします。

スクリーンショット:

enter image description here

5
Gabriel Staples

lekensteynによる回答のためのコメント。私はこれが古い投稿であることを知っていますが、これが便利だと思う人にとっては(ちょうど私がやったように)あなたが呼び出しているスクリプト内に関数を置くだけで別の「ハッキングスクリプト」を作成する代わりに

hacky_function()
{
"$@"
exec "$Shell"
}

「x-terminal-emulator -e/path/to/script hacky_functionオプション引数はこちら」でスクリプトを呼び出します

スクリプトの最後に「$ @」を付けることを忘れないでください

1
Sruli