byobu 스크린 세션에 연결하고 명령을 실행 하시겠습니까?


9

스크립트에서 가능한 한 많이 자동화하는 방법을 실험하고 있습니다. 더 흥미로운 과제 중 하나는 byobu 스크린 세션에 연결하고 명령을 실행하는 것입니다.

그래서 나는 명백한 장소에서 시작하여 몇 개의 스크린 세션이 있는지 살펴 보았습니다 (게임에는 byobu에 3 개의 창이 있고 lordquackstar에는 2 개의 창이 있습니다. 사용자는 별도의 퍼티 인스턴스에 있습니다)

game@quackgame:~$ screen -ls
There is a screen on:
        2019.byobu      (01/05/2011 05:10:04 PM)        (Attached)
1 Socket in /var/run/screen/S-game.

거기에 하나만 있으므로 시스템을 확인했습니다.

lordquackstar@quackgame:/home/game$ sudo ls -lAR /var/run/screen/
/var/run/screen/:
total 0
drwx------ 2 game          users         100 2011-01-06 09:18 S-game
drwx------ 2 lordquackstar lordquackstar 100 2011-01-06 09:17 S-lordquackstar

/var/run/screen/S-game:
total 4
prwx------ 1 game users 0 2011-01-08 07:55 2019.byobu
-rw------- 1 game users 0 2011-01-06 09:18 byobu-exchange
-rw-r--r-- 1 game users 3 2011-01-08 07:32 byobu.updates-available

/var/run/screen/S-lordquackstar:
total 4
prwx------ 1 lordquackstar lordquackstar 0 2011-01-08 07:42 1169.byobu
-rw------- 1 lordquackstar lordquackstar 0 2011-01-06 09:17 byobu-exchange
-rw-r--r-- 1 lordquackstar lordquackstar 3 2011-01-08 07:35 byobu.updates-available

여전히 여러 화면이 없습니다

내 질문 : 스크립트에서 byobu의 창에 어떻게 연결할 수 있습니까?


약간 관련된 메모에서 bash 스크립트에서 연결하면 명령을 보낸 다음 분리 할 수있는 방법이 있습니까?


각 사용자에게 단일 화면 세션이있는 것 같습니다. Byobu에 익숙하지 않습니다. 왜 5 개의 스크린 세션이 있다고 생각하십니까?
— Gilles 'SO- 악마 그만'

@Gilles 더 많은 연구에 따르면 각 사용자마다 하나의 스크린 세션 만있는 것으로 나타났습니다. 나는 그 이후 더 많은 htop스크린 프로세스를 보여준 곳을 생각했다
— TheLQ

답변:


7

창을 포함하여 이전에 분리 된 byobu/ screen세션에 직접 연결할 수 있습니다 .

byobu -r -p2

창 2 (또는 이름이 지정된 창)에 다시 연결됩니다.

-X모든 명령을 byobu/ screen세션으로 보낼 수 있으며 -p스위치 와 함께 작동 합니다.

byobu -p2 -X stuff "uname -a $(echo -ne '\r')"

이것은 a uname -a를 두 번째 (실제로 세 번째) byobu 창으로 echo보내고 끝에는 캐리지 리턴을 보내 명령이 실행됩니다.


문자열 끝에 줄 바꿈을 포함시킬 수 있습니다.
— Gilles 'SO- 악마 그만'

"물건"이란 무엇입니까? 그것을 제거하면 byobu "-X Unknown command 'uanme -a'에서 오류가 발생합니다.
— TheLQ

그것은 세션 에 명령 (이 경우 uname -a)을 "붙여 넣는다 "고 말합니다 byobu.
— wag

아, 거기서 연결하지 않았습니다. 어쨌든 도움을 주셔서 감사합니다. 완벽하게 작동합니다!
— TheLQ

stuff 명령은 tmux가 아닌 GNU 화면에서만 작동하는 것으로 보이며 최근에 기본값으로 보입니다.
— Phil Ricketts

7

연결하지 않고 특정 화면 세션의 특정 화면 창으로 명령을 보낼 수 있습니다.

screen -S sessionname -p windowname -X screencommand

세션 이름은 -S화면 또는 sessionname명령을 시작할 때 옵션 으로 설정됩니다 . 기본적 byobu으로 byobu와 함께 있습니다. 이후에 화면 PID를 사용할 수도 있습니다 -S. title명령 으로 창 이름을 설정할 수 있습니다 . 창 번호를 사용할 수도 있습니다.

screen -S byobu -p 1 -X stuff 'ls
'

공간이없는 문자열을 채울 때 효과가 있지만 아무것도하지 않습니다. 어떤 아이디어?
— François Beausoleil

알았어. 공간은 bash에 의해 로컬로 해석되었으며 SSH는 전체 명령을 보지 못했습니다. 지금 작동합니다!
— François Beausoleil
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.