名前付きセッション

名前付きセッション

画面上でコマンドを実行および分離するのは非常に簡単です。

screen -S test -d -m echo "output of command that runs forever"

しかし、ロギングのためにすべての出力をファイルにパイプしたいと思います。画面上で以下を実行して分離するにはどうすればよいですか?

echo "output of command that runs forever" &> output.log

編集する:

明確にするために、単に画面を起動してコマンドを実行するにはこのスクリプトが必要です。分離はオプションではありません。

ベストアンサー1

追加bash(または実際のシェル)呼び出しでコマンドをラップしてそこにリダイレクトできます。

$ screen -dm bash -c 'echo hello > ./out'
$ cat ./out
hello

からman screen

-d -m 「分離」モードのスタート画面です。これにより、新しいセッションが作成されますが、接続されません。これはシステム起動スクリプトに役立ちます。

名前付きセッション

screen -lsバックグラウンドジョブの名前を明確に指定し、必要に応じて以下を追加することが適切かもしれません。

$ screen -S mysession -dm sleep 20
$ screen -ls
8431.mysession  (10/04/2021 12:47:58 PM)    (Detached)

# attach
$ screen -r mysession

パラメータ渡し方法

ただし、パラメータ化は面倒です。bash渡されたパラメータは$0- 注ignore_me_arg

# note the outer-most quotes to be single -- we don't want them to
# be expanded on the caller's side, but on the callee's one

$ screen -dm bash -c 'echo $1 > ./out' ignore_me_arg hello
$ cat ./out
hello

最後の例として、super_scriptすべての引数を印刷するプログラムがあると仮定します(このように)。内部で呼び出し、リダイレクトし、他のパラメータセットを使用してすべての操作を実行したいと思います。それではこれを行う必要があります:stdoutechoscreen

$ screen -dm bash -c 'super_script "$@"  > ./out.1' arg0 arg1
$ screen -dm bash -c 'super_script "$@"  > ./out.2' arg0 arg1 arg2
... wait for screen's to finish
$ cat out.1
arg1
$ cat out.2
arg1
arg2

おすすめ記事