bash 쉘처럼 쉘을 종료하기 위해 ksh에서 키를 매핑하는 방법 Ctrl을 알고 싶습니다 .D
ksh의 키 바인딩에 익숙하지 않습니다.
편집하다
아래 내 의견을 참조하세요.
$ echo $0
bash
$ exit # I pressed Ctrl-D here, 'exit' string was placed and the shell exited
$> echo $0
ksh
$> Use 'exit' to leave ksh # I pressed Ctrl-D here, Got this message and returned to the ksh prompt
$> echo $0
ksh
$> cat >> somefile
Some text
$> # I pressed Ctrl-D here. So this key combination is taken as eof char for file, but not for exit.
그렇다면 쉘을 종료하려면 매핑이 필요합니까 Ctrl? D어떻게 해야 하나요?
답변1
Ctrl+ D(ASCII EOT
)이미매뉴얼 페이지에 설명된 대로 모드 vi
및 emacs
모드 에서 쉘을 종료하도록 매핑합니다 . ksh93
스크립트 캡처를 보면 이는 분명한 사실입니다.
매뉴얼 페이지는 또한 다른 사람들이 여기에 언급한 내용, 즉 행이 비어 있을 때만 키가 이 효과를 갖는다는 것을 설명합니다. (이는 쿠킹 모드에서 라인 훈육의 표준 동작을 모방합니다.)
당신이 놓친 것은 (맨 페이지에서도 설명하는) ignoreeof
해당 옵션을 설정했다는 것입니다. 따라서 Korn Shell은 빈 줄에서 Ctrl+를 보고 D무시하며, ignoreeof
설정이 열려 있을 때 해당 명령을 명시적으로 사용해야 함 을 설명하는 메시지를 인쇄합니다 exit
.
따라서 stty
다른 답변에서와 같이 핸들러를 잊어버리고 캡처하십시오.
set -o noignoreeof
추가 읽기
- Ctrl+D로 세션 연결이 끊어지는 것을 방지하는 방법은 무엇입니까?- 반대 효과를 얻으려는 질문에는 반대 답변이 있습니다.
답변2
당신이 원하는stty
명령: ^D가 어떻게 매핑되는지 확인하세요 stty -a
. 다른 것으로 변경할 수 있습니다 stty eof char
. "eof" 설정을 제거하세요.stty eof undef
trap
테스트되지 않음: 명령에 대한 ksh 매뉴얼 페이지를 읽고 싶습니다 . 신호에 대한 핸들러를 설정하는 것만으로도 충분할 수 있습니다 EXIT
.
# warning: completely untested
exit_handler() { echo "exit"; exit; }
trap exit_handler EXIT