Programing

bash에서 기능 키를 명령에 어떻게 바인딩합니까?

lottogame 2020. 9. 18. 19:14
반응형

bash에서 기능 키를 명령에 어떻게 바인딩합니까?


예 : "foobar"메시지를 F12누를 echo "foobar"때마다 F12화면에 인쇄되도록 키를 명령 에 바인딩하고 싶습니다 . 이상적으로는 내장 기능뿐만 아니라 임의의 쉘 명령이 될 수 있습니다. 이것에 대해 어떻게 갑니까?


당신은 눌러 키에 의해 방출되는 문자 순서를 확인할 수 있습니다 Ctrl- v명령 줄에서, 당신이 관심있는 키를 눌러 내 시스템에. F12, 내가 얻을 ^[[24~. ^[나타냅니다 Esc. 서로 다른 유형의 터미널 또는 터미널 에뮬레이터는 동일한 키에 대해 서로 다른 코드를 내보낼 수 있습니다.

Bash 프롬프트에서 이와 같은 명령을 입력하여 키 매크로를 활성화하여 사용해 볼 수 있습니다.

bind '"\e[24~":"foobar"'

이제를 누르면 F12추가 편집을 위해 명령 줄에 "foobar"가 표시됩니다. 키 입력으로 즉시 명령을 입력하려면 새 줄을 추가 할 수 있습니다.

bind '"\e[24~":"pwd\n"'

이제를 누르면를 누르지 F12않아도 현재 디렉토리가 표시됩니다 Enter. 이미 줄에 무언가를 입력했고 자동으로 실행되는 이것을 사용한다면 어떨까요? 지저분해질 수 있습니다. 그러나 매크로의 일부로 줄을 지울 수 있습니다.

bind '"\e[24~":"\C-k \C-upwd\n"'

이 공간은 Ctrl- u에 벨이 울리지 않도록 삭제할 내용이 있는지 확인합니다 .

원하는 방식으로 매크로가 작동하면 ~/.inputrc파일 에 추가하여 영구적으로 만들 수 있습니다. bind명령이나 작은 따옴표의 외부 집합이 필요하지 않습니다 .

"\e[24~":"\C-k \C-upwd\n"

편집하다:

현재 명령 줄을 방해하지 않고 무언가를 실행할 키 바인딩을 만들 수도 있습니다.

bind -x '"\eW":"who"'

그럼 당신은 예를 들어, 사용자 이름을 필요로하는 명령을 입력하고, 당신은 당신이 누를 수, 로그인 한 사용자의 이름을 알 필요가있는 동안 Alt- Shift- W와의 출력이 who표시되고 메시지가 다시 발행 될 것입니다 부분 명령은 그대로두고 커서는 줄의 같은 위치에 있습니다.

불행히도 이것은 F12두 개 이상의 문자를 출력하는 것과 같은 키에 대해서는 제대로 작동하지 않습니다 . 어떤 경우에는이 문제를 해결할 수 있습니다.

명령 ( who이 경우)은 프로그램, 스크립트 또는 함수와 같은 실행 파일 일 수 있습니다.


.inputrc (GNU Readline 라이브러리 용 구성 파일)에서 bash 키 바인딩을 정의 할 수 있습니다. 구문은

<keysym 또는 키 이름> : 매크로

예를 들면 :

Control-o: "> output"

를 누르면 "> 출력"을 삽입하는 매크로가 생성됩니다. ControlO

 "\e[11~": "echo foobar"

를 누르면 "echo foobar"를 삽입하는 매크로가 생성됩니다 F1. 키 심이 무엇인지 모르겠습니다 F11.

편집하다:

.inputrc\n줄 바꿈 이스케이프 시퀀스를 이해 하므로 다음을 사용할 수 있습니다.

 "\e[11~": "echo foobar\n"

명령이 발행 된 후 효과적으로 'Enter를 누르십시오'.


이 솔루션은 X11 환경에만 해당되며 bash와 관련이 없지만 .Xmodmaps에 다음을 추가합니다.

 % loadkeys
 keycode 88 = F12
 string F12 = "foobar"
 %

F12를 누르면 "foobar"문자열이 터미널로 전송됩니다.


Ctrl+B명령 에 묶고 싶었습니다 . 위의 답변에서 영감을 받아 사용하려고했지만 bind일련의 신비한 물결 선 ( \e[24~?)이 Ctrl+B.

On a Mac, go to Settings of the Terminal app, Profiles -> Keyboard -> + then press the keyboard shortcut you're after and it comes out. For me Ctrl+B resulted in \002 which i successfully bound to command

bind '"\002":"echo command"'

Also, if you want the command to be executed right-away (not just inserted in to the prompt), you can add the Enter to the end of your command, like so:

bind '"\002":"echo command\015"'

참고URL : https://stackoverflow.com/questions/4200800/in-bash-how-do-i-bind-a-function-key-to-a-command

반응형