バックグラウンドで(ターミナルウィンドウやTTYなしで)実行され、時々何かを行うスクリプトがあります。
何かを実行したときに別のことを実行したいのですが、Gnomeターミナルウィンドウを開いて2つのコマンドを実行します。実際には、1つのコマンドを実行するだけで済みますが、ターミナルウィンドウを開いたままにして、コマンドの出力を確認したいと思います。このコマンドはstdoutとstderrの両方に出力し、その出力は時間とともに変化するため、ファイルに書き込んで何らかの通知を送信するだけでは十分に機能しません。
Gnomeターミナルでウィンドウを開いて1つのコマンドを実行できます。
gnome-terminal -e "sleep 10"
簡単にするために、長期実行コマンドとしてsleep
を選択しました。ただし、別のコマンドを追加すると、ターミナルウィンドウは開きません。
gnome-terminal -e "echo test; sleep 10"
これに対する解決策は何ですか?
gnome-terminal
は引用符で囲まれたすべてを1つのコマンドとして扱います。そのため、それらの多くを連続して実行するには、インタープリター(通常はシェル)を起動し、その中で何かを行う必要があります。たとえば、次のようになります。
gnome-terminal -e 'sh -c "echo test; sleep 10"'
ところで、コマンドがジョブを完了した後でもウィンドウを開いたままにしたい場合があります。その場合は、新しいシェルを起動するか、現在のシェルを新しいシェルで置き換えます。
gnome-terminal -e 'sh -c "echo test; sleep 10; exec bash"'
2020年1月現在、-e
オプションgnome-terminal
は引き続き機能しますが、警告がスローされます
#オプション「-e」は非推奨であり、以降のバージョンのgnome-terminalで削除される可能性があります。
#“-”を使用してオプションを終了し、その後にコマンドラインを実行します。
警告なしで2つのコマンドを実行できます
gnome-terminal -- /bin/sh -c 'echo test; sleep 10'
そして、 this answer で述べたように、後でウィンドウを開いたままにしたい場合は、
gnome-terminal -- /bin/sh -c 'echo test; sleep 10; exec bash'