세션 외부에서 화면 명령 호출

세션 외부에서 화면 명령 호출

GNU Screen 세션에 명령을 보내는 방법은 무엇입니까? 세션을 대화형으로 사용하는 경우 Ctrl+ A이스케이프 시퀀스를 입력합니다.

lynx"텍스트 기반 UI"(예 : 또는 ) 로만 작동하는 프로그램을 작동하려면 다른 위치(예: BASH 쉘 스크립트, PHP 페이지 등)에서 GNU SCREEN 세션으로 특정 키 입력을 보내야 합니다 vim. 때로는 화면에 무슨 일이 일어나고 있는지 확인해야 하므로 명령을 사용하여 뷰를 내보냅니다 hardcopy -h outputFile.

Ctrl+를 화면에 " 채워야 A" 하지만 +를 :보낼 수는 없습니다 . 나는 이것을 시도했습니다 :CtrlA

$screen -S test -p 0 -X 물건 '^A:'

하지만 이는 화면에 콜론(:)만 표시하고 ^A를 무시합니다.


현재 수행 중인 작업(작동하지 않음, 3단계를 완료하려면 수동 개입 필요):

  1. 설정 화면

    $스크린-S 테스트

  2. 화면에 명령 주입

    $screen -S test -p 0 -X 물건 'python^M'
    $screen -S test -p 0 -X 물건 '42*9^M'

  3. 화면 내에서 Ctrl+를 수행 A한 다음 :화면의 명령 입력을 불러올 수 있습니다. 해당 입력에 다음을 입력합니다.

    :하드 카피 -h /tmp/scr-test.txt

  4. cat그런 다음 파일을 -ing하여 화면 내용을 가져올 수 있습니다.

    $고양이/tmp/scr-test.txt

  5. 다음을 생성합니다.

    $cat /tmp/scr-test.txt
    justin@justin2012:~$ python
    Python 2.7.8(기본값, 2014년 10월 18일, 12:50:18) [GCC 4.9.1]
    linux2에서는
    "help", "copyright"를 입력하세요. , "크레딧" 또는 "라이센스"를 참조하세요.
    >>> 42*9
    378
    >>>

답변1

screen -S test -p 0 -X stuff '^A:'작동하지만 사용자가 원하는 작업이 아니라 예상되는 작업을 수행합니다. ^A두 문자를 :화면 창에서 실행 중인 응용 프로그램에 보냅니다. 이것이 stuff바로 이 명령이 수행하는 작업입니다. 화면 인터페이스가 아닌 화면 창에서 실행 중인 응용 프로그램에 문자를 보냅니다.

당신이 원하는 것은 화면 내부에서 실행되는 응용 프로그램이 아니라 화면 자체에 명령을 보내는 것입니다. 따라서 이 명령을 사용하지 마십시오 stuff. 이 명령의 목적은 아닙니다. 당신이 찾고 있는 기능은 간단합니다 screen -X …. 이것은 screen -X stuff …특별한 경우입니다.

hardcopy예를 들어 화면에서 명령을 실행하려면 다음을 실행하세요.

screen -S test -p 0 -X hardcopy -h outputFile 

답변2

내가 원하는 것을 달성하기 위해 사용자는숙밍데그리고레몬 주스CtrlA++ 인터페이스에 액세스하는 방법에는 두 가지가 있는데 :, 이는 훌륭합니다.

숙밍데썼다:

사용해 보는 것은 어떨까요 eval? 에서와 같이screen -S test -p 0 -X eval "hardcopy -h sample"

레몬 주스썼다:

아니면 그냥screen -S test -p0 -X hardcopy out.txt

테스트해본 결과 두 솔루션 모두 작동합니다. 계속 사용할 것 같아요숙밍데매개변수를 보존할 수 있게 해주는 솔루션입니다 -h.

관련 정보