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


140

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

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

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

回答:


138
gnome-terminal -e command

または

xterm -e command

または

konsole -e command

かなり

terminal -e command

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

コンソールには--nocloseフラグがあります。

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

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

gnome-terminal --window-with-profile = NAMEOFTHEPROFILE -e コマンド

1
私は、端末を保持しようとすると、私は「子プロセスがステータスコード127で正常に終了しました」を取得
ダルシャンChaudharyさん

2
gnome-terminalにはタイトルオプションが
なくなりました:

1
@törzsmókusそれは確かに2017年です!LTSリリースのサポート期間は5年間です。14.04は2019年4月まで終了しません。wiki.ubuntu.com/Releases
bhass1

1
gnome-terminal -e commandcommandが引用されている場合にのみ機能します。だから、これは動作しません。gnome-terminal -e "echo hello world; sleep 3"しかし、このことを行いますgnome-terminal -e "bash -c 'echo hello world; sleep 3'"。はぁ。
-bgoodr

3
; $SHELLコマンドの最後に追加することで、gnome-terminalを開いたままにすることもできます。例:gnome-terminal --tab --title="test" --command="bash -c 'cd /etc; ls; $SHELL'"
ガブリエルステープルズ

58

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

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


この場合、質問者はすべての端末で同じではない何かをしたいので、それはあまり役に立ちません。
-nickguletskii

試行#3:これは、ターミナルを開いたままにして、オプションの引数でプログラムを実行する必要があります。
レーケンシュタイン

1
私はgnomeオプションを使用しましたが、スクリプトを実行すると、メインターミナルが閉じます。..どうして?
マクラン

3
@ Suda.neseこれは仕様によるもので、「ターミナル」がスクリプトの実行を完了すると、それ以上やることがないので終了します。コマンドを実行できるシェル(bash)を呼び出すか、などの行を使用して、これを「修正」できますread -p "Press Return to continue"
レーケンシュタイン

1
ターミナルで複数のコマンドを実行するにはどうすればよいですか?たとえばcd xxx && start.sh。通訳は(論理的である)コマンドの第二部として、&&を見て、私はそれを引用するならば、それは一つの大きな引数として全体のことがexecしよう
リチャード

9

非常に単純に-

#!/bin/bash

/etc/init.d/ccpd status

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

#!/bin/bash

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

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

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

ここに画像の説明を入力してください

ここに画像の説明を入力してください


1
@cipricus私は信じてい[]ただけのプレースホルダを
カルティクT

とった。しかし、私は端末をそれほど速く閉じないようにしなければなりません。それはリンクされた質問にもあると思います

@cipricusはプロファイル1を試しましたか?ただ、追加する必要があり--window-with-profile=NAMEOFTHEPROFILE、私が与えたものに
カルティクT

1
@cipricusより良い指示を与えるために家に帰らなければなりませんが、アイデアはそのオプションセットで特別なプロファイルを作成し、上記の場所で特別なプロファイルの名前を使用することです。
カーティックT

2
@cipricusで十分であれば、それで構いません。プロファイルは設定のグループにすぎません。スクリプトで使用するためにのみ設定をセットアップでき、すべての端末で使用する必要はありません。あなたが持っているすべてのプロファイルを参照するには>プロファイル、およびリンク先の記事で説明したようにセットアップがあった、あなたはそこに1を追加します-あなたは、編集を見ることができます
カルティクT

5

@nickguletskiiの回答と、彼の回答の下にある私自身のコメントに助けられ、@ 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" =このタブに「tab 1」というタイトルを付けます
  • --command="bash -c 'cd /etc; ls; $SHELL'"= bash -c 'cd /etc; ls; $SHELL'コマンドを実行します。これは、例として作成したコマンドです。これが何をするかです:
    • bash -c それはbash 'c'ommandだと言います
    • cd /etc =「/ etc」パスへの 'c'hange' d'irectory
    • ls = 'l'iはこのディレクトリの内容ではありません
    • $SHELL=シェルを開いたままにして作業できるようにするには、この不可解なtidbitが必要です。シェルを開きたい場合は、コマンドを実行してから閉じ、この部分を削除します。ただし、タブを開いたままにしておきたいので、プログラミングの魔法をかけることができます。:)
  • 次に、その--tab部分に戻ってタブ2を生成し、タブ3を生成します。心のコンテンツに合わせてカスタマイズします。

スクリーンショット:

ここに画像の説明を入力してください


1
私が助けてくれてうれしいです)また、クリックしてプロジェクトの作業を開始できるスクリプトもあります。それらには2つの問題がありました:多くのターミナルウィンドウ(それらのために完全に別個の画面がありました)と、例えばサーバーがクラッシュした後にウィンドウが閉じます。その答えは、--tab + $ SHELLで私の両方の問題を解決します。ニース
grabantot

1

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

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

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

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


-2

screenコマンドを使用し、既存のスクリーンセッションから-d detachし、ここに再接続します-m新しいスクリーンセッションを強制します-Sデフォルト名を使用する代わりに名前付きセッションを作成します


この答えは全く明確ではないが、より理解しやすくするために気にしてください
azerafati

@azerafati確かに、画面はターミナルウィンドウを開きません...その素晴らしいパッケージでも意図されていません...
erm3nda
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.