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
'Programing' 카테고리의 다른 글
파마 공간이란? (0) | 2020.09.18 |
---|---|
(n & -n) == n이면 n이 2의 거듭 제곱 인 이유는 무엇입니까? (0) | 2020.09.18 |
Android Spanned, SpannedString, Spannable, SpannableString 및 CharSequence (0) | 2020.09.18 |
SpanSizeLookup을 사용하여 GridLayoutManager의 항목에 대한 범위 설정 (0) | 2020.09.18 |
gcloud와 minikube간에 kubectl 클러스터를 전환하는 방법 (0) | 2020.09.18 |