可能であれば、スクリーンセッションにコマンドを送信して出力を取得したいと思います。
このサイトや他の多くのサイトで見つけたように、スクリーンセッションにコマンドを送信しようとしましたが、うまくいかないようです。
root@server [~]# screen -X "script -a -c 'ls -l' /tmp/command.log" && cat /tmp/command.log
cat: /tmp/command.log: No such file or directory
root@server [~]#
実行中の Screen セッションは 1 つだけなので -S および -p を省略しました (これらも試しましたが効果がありませんでした)。たとえば、
root@server [~]# screen -p 0 -X stuff "script -a -c 'ls -l' /tmp/command.log" && cat /tmp/command.log
cat: /tmp/command.log: No such file or directory
ベストアンサー1
まず読んでください分離した画面にテキスト入力を送信する。実際に-p
正しいウィンドウに直接入力する必要があります。また、改行文字(CRまたはLF、画面内で実行される対話型シェルの両方を許可)を入力するまでコマンドは実行されません。それは:
screen -p 0 -X stuff "script -a -c 'ls -l' /tmp/command.log$(printf \\r)" &&
cat /tmp/command.log
2番目の問題は、screen -X stuff …
入力画面セッションに入った後にコマンドが完了することです。ただし、コマンドの実行には時間がかかりますscript
。実行時にまだ完了していないcat /tmp/command.log
可能性が高いです。script
screen
内部で実行されているコマンドが一種の通知を生成するようにする必要があります。たとえば、Screen のシェルが Screen と同じコンピュータで実行されていると仮定すると、完了した信号を再送信できます。
sh -c '
sleep 99999999 &
screen -p 0 -X stuff "\
script -a -c \"ls -l\" /tmp/command.log; kill -USR1 $!
"
wait
cat /tmp/command.log
'