bash 유틸리티를 사용하여 일부 명령을 바인딩 하려고 하면 bind -x
터미널에 stdin 입력이 표시되지 않습니다.
예:
root> # bind -x '"\C-p": su dargod'
ctrl+P를 입력하면 사용자 dargod로 로그인했지만 입력한 내용이 모두 표시되지 않습니다. 연결을 위한 바인딩 ssh 명령과 동일한 상황입니다.
쉘과 정상적으로 상호작용하려면 어떻게 해야 합니까?
정보:
Bash 3.1.17(CentOS 5)
Bash 4.2.46(CentOS 7)
Bash 4.1.2(CentOS 6)
Bash 5.0.7(Arch Linux)
Bash 4.2.45(Gentoo)
답변1
키 입력에 바인딩된 명령은 줄 편집의 일부로 사용됩니다. 에코 없이 원시 모드에서 터미널을 실행하며 bash는 모든 키 누르기가 처리될 것으로 예상합니다. 대부분의 명령은 터미널에서 실행될 것으로 예상됩니다.요리 모드, 터미널은 한 번에 한 줄씩 읽고 입력을 에코합니다.
터미널 상호작용을 대신하는 명령을 실행하려면 일시적으로 터미널을 "요리" 모드로 설정하세요.
bind -x '"\C-p": _bash_stty_save=$(stty -g); stty sane; su dargod; stty "$_bash_stty_save"'
bash가 예상하지 못한 작업을 수행하고 있기 때문에 여전히 완벽하게 작동하지 않을 수 있습니다. 바인딩은 명령을 실행하는 데 적합한 도구가 아닙니다. 명령에 대한 바로 가기를 정의하려면 다음을 사용하십시오.별명.
1 엄밀히 말하면, bash 라인 편집기에서 ^C
, ^Z
, ^\
( isig
) 및 ^Q
/ ^S
( )가 비활성화되지 않기 때문에 ( emacs 모드 증분 검색과 충돌하더라도) 완전한 기본 모드가 아닙니다 .ixon
^S