GNU画面でプログラムを実行し、直後にデタッチします


27

システム起動時にGNU Screenセッションでプログラムを開始するスクリプトを作成する方法を見つけようとしています。私はこれを試しています:

#!/bin/bash
screen -S test -d -m -X $HOME/folder/folder/.program \
screen -S test2 -d -m -X $HOME/folder/folder/.program2 \

しかし、セッションはすでに切り離されているため、コマンドを実行できませんか?私が必要とする唯一のものは、スクリーンセッションでコマンドを実行し、このセッションをすぐに切り離します。

答えてくれてありがとう、しかし今私は別の問題に直面しました。「program and program2」にいくつかの変数を配置した後、スクリプトが機能しなくなります。このようなもの:

#!/bin/bash
screen -S test -d -m $HOME/folder/folder/.program -f config.cfg

何らかの理由で「-f config.cfg」が無視されました。私もコマンドを引用しようとしましたが、あまり役に立ちません。


なぜ-Xオプションなのですか?
enzotib

回答:


34

あなたは本当に\行の終わりに置くことを意味しましたか?そうでない場合は、それらを削除してみてください-次の文字をエスケープします。

また、ドロップ-Xすると、セットアップが機能します。たとえば:

screen -S test -d -m -X touch /tmp/test

No screen session foundただし、で失敗します。

screen -S test -d -m touch /tmp/test

正常に動作します。そういうものとして、私は以下があなたのために働くと思う:

#!/bin/bash
screen -S test -d -m $HOME/folder/folder/.program
screen -S test2 -d -m $HOME/folder/folder/.program2

起動時にこれを実行すると、$ HOMEは特定のユーザーとしてログインした後と同じではないことに注意してください。特定のユーザーとして実行する必要がある場合はsu、そのユーザーとして実行するためにを使用する必要があります。フルパスを指定すると、あいまいさがなくなります。

#!/bin/bash
screen -S test -d -m su - username /home/username/folder/folder/.program
screen -S test2 -d -m su - username /home/username/folder/folder/.program2

または、上記のスクリプト全体をとして呼び出しますsu - username /path/to/your/script


答えてくれてありがとう、しかし今私は別の問題に直面しました。「プログラムとプログラム2」に変数を入力した後、スクリプトが機能しなくなる
11

これ:folder / .programが終了した場合、スクリーンセッションが自動的に閉じられる場合除いて、私が探してscreen -S test -d -m $HOME/folder/folder/.programいるものほぼ同じです プログラムが完了した後でも、画面セッション(シェル)を実行し続ける方法はありますか?おそらく、プログラムを排他的に実行する代わりに、プログラムを起動してシェルプロンプトに戻るシェルを起動する、などでしょうか?
RocketNuts

4

Cry Havokが言及したように、プログラムをコマンドラインに配置できます。

本当に-Xオプションを使用する必要がある場合、a) 'screen'コマンドを指定する必要があり、b)セッションが事前に存在する必要があります。

screen -dmS test
screen -S test -X screen $HOME/folder/folder/.program
screen -dmS test2
screen -S test2 -X screen $HOME/folder/folder/.program2

プログラムをコマンドラインに配置すると、プログラムが終了すると画面が終了します。コンソール出力を表示する場合、画面を開いたままにするコマンドラインフラグは表示されません。ここに示すように、画面を起動してコマンドを個別sleepに送信する場合、コマンドを送信する前にセッションを開始するための画面時間を与える明示的なコマンドが必要になる場合があります。
チャイナサウルス14

この答えは、同様の質問に答えるstackoverflow.comの答えと非常に似ています。この答えはユーザーのデフォルトシェル内でプログラムを実行するため、@ CryHavokよりもこの答えが好きです(@CryHavokは親シェルなしでプログラムを実行するため、プログラムが終了するかctrl-cするとスクリーンセッションがすぐに終了します)
Trevor Boydスミス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.