web-dev-qa-db-ja.com

Bashスクリプト:画面セッションを作成し、その中でコマンドを実行します

スクリーンセッションを開始し、内部でコマンドを実行するbashファイルを書きたいのですが。

問題は、最初にセッションを作成し、手動でセッションを終了すると次のコマンドが実行されることです。セッション内でコマンドを実行する方法はありますか?

これは今までの私のコードです:

#!/bin/bash
screen -S test
python3 test.py
2
phyyyl

Screenセッション内で実行するには、コマンドを渡す必要があります。これを行うには、コマンドを直接渡すか、必要なコマンドを実行するスクリプトを呼び出します。

screen -S test "python3 test.py"

この方法を使用する場合、コマンド(python)とそれに渡される引数(test.py)は両方ともスピーチマーク「..」の中にあります-特定の形式のスピーチマークを必要とする引数を渡す場合、これは複雑になる可能性があり、以下のメソッドを使用する方が簡単な場合があります。

screen -S test /home/user/test.sh

test.shは/ home/user /にあり、実行可能です(chmod +x ./test.py)と含まれています:

#!/bin/sh
python3 test.py

2番目の方法の利点は、スクリプト内に必要な数のコマンドを含めることができることです。コマンドは順番に実行されます。

タスクのバックグラウンドを使用して、複数のコマンドを「同時に」実行できます。

#!/bin/sh
# All 3 will run at the same time
python3 test.py &
python3 test1.py &
python3 test2.py &

SFでの同様の質問 でいくつかの特別な巧妙なトリックを見つけることができます。最後に注意すべき点は、これらすべてのメソッドでは、プログラム/スクリプトが終了するとスクリーンセッション自体が閉じることです。これを実行したくない場合は、bashセッションの実行を確認します。これにより、スクリプトが呼び出され、その後bashセッションに戻ります-このようにscreen -S test "someCommand; bash"

これは、-X引数を使用して実現できる場合があります。最初にセッションを作成し、次にコマンドを送信してスクリプトを実行します。

$ echo "echo Hello world > /tmp/foo" > /tmp/myscript.sh; chmod a+x /tmp/myscript.sh
$ screen -S mysession -d -m bash
$ screen -r mysession -X stuff "/tmp/myscript.sh"$(echo -ne '\015')
$ cat /tmp/foo 
Hello world

「stuff」コマンドは、端末へのテキストの貼り付けをシミュレートします。 echo-commandは、ヒットリターンをエミュレートします。コマンドの送信に関する優れたブログ投稿: https://theterminallife.com/sending-commands-into-a-screen-session/

0