미덕 화면에서 일부 명령을 실행하는 다음 코드가 있습니다.
screen -R << EOF
cd /home/users/devops_tester/apps/Selenium-Webdriver
export DISPLAY=:99
npm start
EOF
오류가 발생합니다.
Must be connected to a terminal.
어떻게 해결할 수 있나요?
이 관련 주제를 찾았지만 SSH를 사용하지 않습니다.
명령을 사용하여 데스크탑에서 SSH를 통해 원격 서버에서 스크린 세션을 시작하는 방법은 무엇입니까?
다음은 화면 앱입니다.
답변1
첫 번째-아르 자형이는 무언가 실행 중이었을 수 있는 기존 화면 세션을 재개하려고 한다는 의미입니다. 이 경우 쉘 명령을 푸시하고 실행되기를 바랄 수는 없습니다. 복원된 screen 세션에 실행 중인 편집기가 있으면 어떻게 되나요? 그러니 사용하지 마세요.-아르 자형실행할 명령을 지정하려는 경우.
또 다른 문제는 << __EOF__
호출된 프로그램을 통해 입력 리디렉션을 사용하면 런타임이 표시되지 않는다는 것입니다.단말기즉, 대화형 터미널이 없습니다. 이는 여기서 쉽게 증명할 수 있습니다.
$ tty
/dev/pts/0
$ tty << __EOF__
__EOF__
not a tty
다행스럽게도 screen
시작 시 사용자 정의 명령을 실행할 수 있는 기능이 지원됩니다. 간단합니다 screen command args
(참고로-아르 자형후면 화면에서).
/bin/sh
귀하의 경우에는 screen이 여러 셸 명령을 실행하지 않으므로 모든 명령을 인수로 전달해야 합니다 . 다음과 같이 작동해야 합니다.
$ screen /bin/sh -cx "cd /home/users/devops_tester/apps/Selenium-Webdriver; export DISPLAY=:99; npm start"
새 화면 세션이 생성되고 명령이 실행됩니다. 이것-엑스쉘이 참조용으로 실행하는 명령을 인쇄하도록 합니다. 선택사항이므로 제거할 수 있습니다.
즉시 분리된 스크린 세션에서 위의 내용을 실행하고 나중에 다시 연결할 수도 있습니다.
$ screen -d -m /bin/sh -cx "cd /home/...; export ...; npm start"
# runs the commands in screen but returns immediately
예를 들어 시스템 시작 중에 명령을 실행하려는 경우에 유용합니다.
물론 위 세션을 다시 연결하여 무슨 일이 일어나고 있는지 확인할 수 있습니다.
$ screen -R # re-attach to the above screen session
마지막으로 중요한 것은 모든 명령을 /bin/sh
인수로 전달하는 대신 작은 3줄 셸 스크립트를 만들어 실행 가능하게 만들고 간단한 호출로 실행하는 것이 더 쉬울 수 있다는 것입니다.
$ screen /path/to/the-script
답변2
또한 screen 'stuff' 명령을 사용하여 실행 중인 screen 세션 내에 포함된 셸에 명령줄을 삽입할 수도 있습니다.
NL=$(echo -ne '\015')
screen -S YOURSCREEN -dm
#
# Wait a sec for screen to get going...
sleep 1
screen -S YOURSCREEN -p 0 -x stuff "cd /home/users/devops_tester/apps/Selenium-Webdriver${NL}"
screen -S YOURSCREEN -p 0 -x stuff "export DISPLAY=:99${NL}"
screen -S YOURSCREEN -p 0 -x stuff "npm start${NL}"
나는 이 기술을 사용하여 systemd 또는 init.d에서 부팅 시부터 장기간 실행되는 대화형 프로세스를 시작합니다.
답변3
다음 예제에서는 스크립트가 실행될 때 코드를 실행하거나 동일한 코드가 screen 세션에서 실행됩니다 ./my_script.sh -s
.
# contents of my_script.sh:
if [ "$1" == "-s" ]; then
screen "$0"
else
# code
fi