分離された画面セッションにコマンドを送信できません。

分離された画面セッションにコマンドを送信できません。

可能であれば、スクリーンセッションにコマンドを送信して出力を取得したいと思います。

このサイトや他の多くのサイトで見つけたように、スクリーンセッションにコマンドを送信しようとしましたが、うまくいかないようです。

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
'

おすすめ記事