screen
私は私のスタンドアロンGNUセッションの簡単な概要を提供したかっただけです。現在の内容をstdoutにダンプできますか?それはまるで
screen --print SESSION_NAME > file.txt
答え1
セッションの1つのウィンドウダンプ画面を使用すると、現在のウィンドウのscreen -X hardcopy /some/file
画面ダンプを/some/file
。
次のコマンドを使用して特定のウィンドウをダンプできます。
screen -X at 3 hardcopy /some/file
これはすべて1つのファイルにあります。
screen -X eval 'hardcopy_append on' 'at \\# hardcopy /some/file'
ファイルをダンプするディレクトリを指定して、ウィンドウごとに1つのファイルをダンプすることもできます(指定しないと、ファイルが開始されたディレクトリscreen
にダンプされます)。
screen -X eval 'hardcopydir /some/dir' 'at \\# hardcopy'
(という名前のファイルにダンプされますhardcopy.<n>
)
-h
スクロールバッファを含めるオプションを参照してください。hardcopy
通常どおり、オプションをscreen
使用して-S
コマンドを実行するセッションを指定します。
答え2
screen
-L
セッションロギングを有効にするオプションから始めます。
screen
または、一度実行したら、-を使用してセッション内のウィンドウのログをオンまたはオフにすることもできます。screen
CTRLaH
ログは現在の作業ディレクトリに作成され、screenlog.X
Xは一意の番号である名前が付けられます。
ロギングが有効になると、ウィンドウリストの出力がL
[フラグ]列に表示されます。
Num Name Flags
0 fedora $(L)
1 sudo $
2 fedora $(L)
答え3
名前付きパイプを使用すると、タイトル(質問ではない)が尋ねられたように標準出力に出力できます。
function screen_peek()
{
# Create a random filename
local pipe="$(mktemp -u)"
# Crete a named pipe
mkfifo "${pipe}"
# Runs hardcopy in background, wrt bash (the client)
screen -S "${1}" -X hardcopy "${pipe}"
# Redirect pipe to stdout and remove trailing and leading blank lines
cat "${pipe}" | sed -e '/./,$!d' -e :a -e '/^\n*$/{$d;N;};/\n$/ba'
# Cleanup
rm -f "${pipe}"
}
cat
Bashの匿名パイプ(およびcoproc)はパイプを開いたままにしているため、スクリーンハードコピーダンプが完了したときにシャットダウン(EOF)は発生しません。匿名パイプ通信は、Pythonなどの他の言語の下位レベルの呼び出しから切り離す必要があります。