화면에서 코드를 실행할 수 없습니다

화면에서 코드를 실행할 수 없습니다

미덕 화면에서 일부 명령을 실행하는 다음 코드가 있습니다.

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를 통해 원격 서버에서 스크린 세션을 시작하는 방법은 무엇입니까?

다음은 화면 앱입니다.

https://packages.ubuntu.com/trusty/screen

답변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

관련 정보