私は次のような様々なリンクを読んだ。
これらはすべて同じことを言っているようです。私は利用可能なオプションのほとんどを試しましたが、私が間違っているかどうかわかりません。
現在、他の可能性のある問題が発生しないようにスクリプトを手動でロードしています。
Filename = "startup.sh" - 次の内容を含むshファイルを使用して起動時に画面を作成します。
#!/bin/sh
screen -dmS megadl
これはうまくいきます。
Filename="start.sh" - 別の画面をロードし、別のスクリプトを実行するためにこのファイルを作成しました。
#!/bin/sh
screen -r megadl /home/pi/mega_start.sh
画面をロードしますが、mega_start.shでは何も起こりません。
Filename="mega_start.sh" - ほとんどのコードがある場所にこのファイルを作成します。テスト目的のため、現在はechoのみが含まれています。
#!/bin/sh
echo "test"
私は何が間違っていましたか? start.shがmega_start.shファイルをロードしたいと思うまで動作し続けます。
答え1
「私が何を間違っているの?」部分への答えはマニュアルにあります:)
-r 分離された画面セッションを復元します。他のオプションは指定できません(-d / -Dとの組み合わせを除く)。ただし、複数の個別のスクリーンセッションを区別するには、[pid.]tty.hostのオプションの接頭辞が必要になる場合があります。
セッションに接続している間にできることはあまりありません。では、何ができますか? screenを使用してstuff
コマンドを既存の画面入力キューに入れてから追加できます(スクリプトの後の新しい行が実際にコマンドを実行します)start.sh
。
#!/bin/sh
screen -S megadl -X stuff '/home/pi/mega_start.sh\n'
screen -r megadl
その画面ですでに何かを実行している場合はそこに渡すことになるので、重要なことを実行している場合は危険になる可能性があることに注意することが重要です。
$ screen -S test -X stuff 'top\n' # run top
$ screen -r test # top displaying processes
$ screen -S test -X stuff 'q' # kill top
$ screen -r test # top is no longer running