명령의 상위 셸로 돌아갈 수 있도록 화면 내에서 명령을 실행하려면 어떻게 해야 합니까?

명령의 상위 셸로 돌아갈 수 있도록 화면 내에서 명령을 실행하려면 어떻게 해야 합니까?

상위 쉘에 액세스할 수 있도록 스크린 세션에서 명령을 실행하는 가장 좋은 방법은 무엇입니까? 동일한 화면 세션에서 다시 시작할 수 있기를 원합니다.

내가 생각해낸 최선의 방법은 다음과 같습니다.

$ cat mr-t.sh 
#!/bin/bash

top
exec /bin/bash

그런 다음:

screen -e'^\\\' -S top-in-screen ./mr-t.sh

그런 다음 top 실행이 중지되면 최소한 사용할 수 있는 동일한 스크린 세션에서 새 셸을 얻습니다. 하지만 이것은 그다지 우아하지 않으며 CC를 누르면 신호가 올바른 프로세스로 안정적으로 전송될 것이라고 스스로 확신할 수 없습니다. 또한 Cz는 전혀 작동하지 않습니다.

저는 OSX에서 bash 3.2.48을 사용하고 Linux에서는 bash 3.2.39를 사용하고 있습니다. 둘 다 운영 체제 공급업체에서 패치를 적용할 수 있습니다.

top물론 여기의 명령에는 특별한 것이 없습니다.

[그런데, -e'^\\\'Magick 화면 키를 Ca(있는 경우 끔찍한 기본값)에서 C-\로 재할당합니다. ]

답변1

다음과 같이 하나를 만듭니다 ~/.screenrc.top.

screen
stuff "top\015"

지금 실행하세요 screen -c ~/.screenrc.top. 경쟁 조건이 없습니다!

답변2

내가 찾은 불완전한 해결책은 다음과 같습니다.

screen -e'^\\\' -dmS top-in-screen

그런 다음 다음을 실행할 수 있습니다.

screen -S top-in-screen -p 0 -X stuff 'top^M'

^M(단 , 실제로 입력해야 하는 내용 만 표시되며 C-v즉시 입력할 수 있습니다 C-m.)

첫 번째 호출과 두 번째 화면 호출 사이에 경쟁 조건이 있기 때문에 완벽하지는 않습니다.

~에서http://aperiodic.net/screen/faq#how_to_send_a_command_to_a_window_in_a_running_screen_session_from_the_commandline에는 다른 유용한 정보가 많이 있습니다.

답변3

이 질문을 한 이후로 저는 다르지만 더 효율적인 솔루션을 채택했습니다.tmux 사용.

새로 명명된 분리된 세션을 시작합니다.

$ tmux new -d -s top

0번째 창에 명령을 보냅니다.

$ tmux send-keys -t top:0 "top" C-m

C-mEnter 키를 누르는 것과 같습니다. 많은 경우, 그것이 당신이 원하는 것입니다. 때로는 그것을 무시하고 싶을 수도 있습니다.

tmux의 명령 세트는 잘 문서화되어 있습니다. 따라서 이를 구동하기 위해 더 복잡한 스크립트를 작성하는 것이 쉽습니다.


일반적으로 이것은 매우 괴상한 답변이 될 것이지만 이것이 내 질문이므로 특히 안정적으로 작동하는 다른 방법을 실제로 얻은 적이 없기 때문에 약간의 여유를 가지겠습니다. 대조적으로, 나는 첫 번째 시도에서 tmux를 올바르게 스크립트할 수 있었습니다.

관련 정보