가능하다면 스크린 세션에 명령을 보내고 출력을 얻고 싶습니다.
이 사이트와 다른 많은 사이트에서 찾은 것처럼 스크린 세션에 명령을 보내려고 했지만 작동하지 않는 것 같습니다.
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
두 번째 문제는 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
'