コマンドが完了した後にこの画面セッションが終了するのはなぜですか? [コピー]

コマンドが完了した後にこの画面セッションが終了するのはなぜですか? [コピー]

私はscreen -dmS mysession command画面を起動し、コマンドを実行して分離する方法を知っています。これは、標準出力をファイルにリダイレクトする必要がある場合に機能します。画面上でプログラムを実行し、すべての出力をファイルにリダイレクトして分離する方法)

screen -dmS mysession bash -c 'ls > test.txt'      # simple example

ただし、最終的にスクリーンセッションは維持されず、そうすることはできず、もはやscreen -r mysession存在しませんscreen -ls

質問:一文でどのようにscreenセッションの開始、コマンドの開始、分離、標準出力をファイルにリダイレクトします(例:)> test.txtが、自動的にscreenセッションを終了しません。待ち終わったの?

リンク質問:program.shが完了した後に「screen -dmS sessionName program.sh」が消えるのを防ぐ方法は?

答え1

「bash -c」を使用すると、非対話型シェルが生成されます。次のプロセスツリーを作成します。

screen───bash───ls

完了すると、lsこれbash以上の処理や入力はなく、完了します。

それはscreenすべてです。

必要なタスクを実行するには、まず対話型シェルを起動する必要があります。

screen -dmS session bash

次に、screenコマンドを使用してscreenセッションにコマンドを入力しますstuff

screen -S session -p 0 -X stuff "ls > test.txt^M"

^M改行文字のように動作します。

exit^Mその後、または同様のコマンドを使用してシェルを終了する必要があります。

後ですべてを1行のIEにまとめることができます。

screen -dmS session bash && screen -S session -p 0 -X stuff "ls > test.txt^M"

正直に言うと、あなたがやろうとしていることをscreen完全に避け、あなたがやろうとしているプロセスを拒否する方が良いと思います。

ls > test.txt & disown %1

これは、追加の機器なしで同じことを行います。

関連情報