원격 서버에는 여러 개의 화면이 열려 있고 각 화면을 다른 목적으로 사용합니다. 예를 들어 ID가 "build"인 화면은 특정 프로그램을 컴파일하는 데 사용됩니다. 다음을 사용하여 언제든지 이 화면을 열 수 있습니다.
ssh myserver -t screen -r build
그러나 호스트 컴퓨터에서 직접 원격 화면의 명령을 실행하고 싶습니다. 예를 들어, ls
원격 화면에서 작업을 수행 하고 싶습니다 build
. 나는 비슷한 것을 시도했습니다 :
ssh myserver -t screen -r build -X ls .
하지만 행운은 없습니다.
어떤 아이디어가 있나요? 가능합니까?
감사해요!
편집: 내 실제 사용 사례:
./buildSomethingOnRemoteScreen() && ./fetchTheBuiltOutputAndDoSomethingWithIt()
답변1
붙여넣기 명령을 사용하여 모든 스크립트를 실행할 수 있습니다.
# read script into register p
ssh hostname screen -S build -X readreg p script_on_the_host
# paste contents of register p into running screen session
ssh hostname screen -S build -X paste p
답변2
나는 서버에서 tmux를 사용하고 있으며 (화면보다 유연함) 연결 후 직접 명령을 실행합니다.
ssh myserver -t 'tmux send-keys -t session-name "ls ./" C-m; tmux attach -t session-name '
해당 세션 이름으로 실행 중인 세션이 있는지 확인하기만 하면 됩니다. "ls ./"를 입력한 후 Cm은 ENTER를 시뮬레이션합니다.
답변3
원격 화면에서 명령을 실행하는 예:
ssh myserver -t screen -S build -X stuff "ls .\n"
-X
옵션은 화면별 명령을 전달합니다. 이러한 명령 중 하나는 stuff
단순히 주어진 문자열을 창의 입력 버퍼에 넣습니다(채웁니다). 개행 문자를 생략하면 명령이 입력되지 않습니다(Enter 키를 누르는 것을 잊어버린 것과 같습니다).직렬 터미널에는 \r
명령 대신 명령을 입력해야 할 수도 있습니다.\n
사용 시 여러 번 실행되는 경우 -X
세션 이름을 지정해야 합니다.-S
를 사용할 때 -X
미리 선택된 창을 사용할 수 있습니다 -p
. 그렇지 않으면 활성을 사용하십시오.
명령이 파일에 저장되어 있거나 직렬 터미널이 느리고 효과가 필요한 경우 readreg
/ register
및 명령을 사용할 수 있습니다 .paste
slowpaste