다음과 같이 키보드를 사용하여 키 조합을 입력하는 것과 같은 방식으로 세션에서 안전하게 분리하기 위해 ( Ctrl+ + )를 어떻게 표현할 수 있습니까 ?adscreen
(echo -ne '\015')
이러한 표현식을 일종의 스크립트에 넣고 싶습니다. Linux 키보드 키 표현식 맵이나 유사한 것이 있습니까?
답변1
내가 아는 한, 쉘에서 실행할 수 있는 명령은 없습니다.이내에screen
이 세션에서 터미널을 분리하는 세션입니다. screen
입력만 보기터미널에서매직 메타 문자( Ctrl- a)의 경우 관리되는 터미널 세션에 표시되지 않는 모든 항목screen
그 자체. 설명하기 위해 - 문자 뒤에 문자가 detachsequence
포함 된 파일을 만들었습니다 .Ctrlad
$ hexdump detachsequence
0000000 01 64
세션 cat
에서 이 작업을 수행 하면 아무 일도 일어나지 않습니다. 파일은 표시되지 않습니다(비록 제어 문자는 표시되지만).screen
$ cat detachsequence
d
또는 똑같이 눈에 거슬리지 echo
않습니다 printf
.
실제로, cat
그 안에 있는 파일이 자신에게 제어 시퀀스를 보낼 수 있다면 screen
이는 특히 심각한 보안 결함이 될 것입니다 .screen
답변2
일반적인 해결책은 다음과 같습니다.
screen -d $STY
화면에서는 세션 이름을 $STY
변수 에 전달하고 screen -d
이를 사용할 수 있습니다.
분리된 상태에서 명령을 실행하고 싶을 수도 있습니다. 다음과 같이 할 수 있습니다.
screen -d $STY & yourcommand
노트: screen -d
그 자체로 충분합니다. 를 지정할 필요는 없습니다 $STY
.
먼저 분리되는 스크립트를 시작할 수도 있습니다.
screen -d -m /the/script
그러나 주의할 점은 스크립트가 분리되기 전에 스크립트와 상호 작용할 수 있는 시간 프레임이 없다는 것입니다. 이 작업을 수행해야 하는 경우 이전 솔루션이 최선의 선택이어야 합니다.
기타 솔루션(환경에 따라 다름):
세션 내의 가상 터미널에서 스크립트를 사용하는 경우 제어 시퀀스를 터미널로 보내는 X
이점을 누릴 수 있습니다 .xdotool
xdotool key control+a+d
답변3
키를 눌러 문자 에 Ctrl-<letter>
대한 문자 코드 1~26을 에 전송합니다 . 즉, 또는 is는 문자 1을 보내고, 또는 or 는 2인 등의 문자를 보냅니다. 캐리지 리턴 문자는 또는 13(십진수) 또는 입니다 .A
Z
Ctrl-A^A
\x01
\001
^B
\015
^M
글쎄요 .Ctrl-A d
\001d
그러나 어떻게든 해당 시퀀스를 전송하려는 경우 screen
화면 자체 내에서 전송하는 것은 쉽지 않습니다. (터미널에서 할 수 있습니다.외부의 screen
. )
스크립트에서 분리를 요청하는 screen
더 간단한 방법은 를 실행하는 것입니다 screen -X detach
. -S
분리할 화면을 지정하고 STY
환경 변수를 사용하여 현재 화면의 ID를 찾을 수 있습니다.