키보드 표현 문제는 (echo -ne '\015') 와 유사합니다.

키보드 표현 문제는 (echo -ne '\015') 와 유사합니다.

다음과 같이 키보드를 사용하여 키 조합을 입력하는 것과 같은 방식으로 세션에서 안전하게 분리하기 위해 ( 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(십진수) 또는 입니다 .AZCtrl-A^A\x01\001^B\015^M

글쎄요 .Ctrl-A d\001d

그러나 어떻게든 해당 시퀀스를 전송하려는 경우 screen화면 자체 내에서 전송하는 것은 쉽지 않습니다. (터미널에서 할 수 있습니다.외부screen. )

스크립트에서 분리를 요청하는 screen더 간단한 방법은 를 실행하는 것입니다 screen -X detach. -S분리할 화면을 지정하고 STY환경 변수를 사용하여 현재 화면의 ID를 찾을 수 있습니다.

관련 정보