Ubuntu에서는 대시 셸을 사용할 때 readline 키 바인딩 및 파일 이름 완성을 얻도록 설정했습니다 alias sh='rlwrap --complete-filenames sh'
(내 컴퓨터에서 sh는 /usr/bin/sh이며 /usr/bin/dash에 대한 심볼릭 링크입니다). 그러나 rlwrap은 SIGTSTP를 올바르게 처리하지 못하는 것 같습니다. 다음 셸 세션을 고려하세요.
배쉬에서:
[email protected]:~$ alias sh='rlwrap --complete-filenames sh'
[email protected]:~$ sh # Run dash.
대시로:
$ sleep 100 # Right after this, I press Ctrl-Z to send SIGTSTP.
[1]+ Stopped rlwrap --complete-filenames sh
[email protected]:~$ # What!? Why do I get a bash prompt!?
Ctrlz를 누르면 dash
대신 중지됩니다 sleep
. SIGTSTP가 대시 자체가 아닌 대시에서 실행 중인 포그라운드 프로세스를 중지하도록 하려면 어떻게 해야 합니까? 대시와 함께 rlwrap을 사용하는 올바른 방법은 무엇입니까?
나는 rlwrap의 대안으로 ./configure --with-libedit
libedit()를 사용하여 대시를 컴파일하여 readline 기능(사용 dash -E
)을 얻을 수 있다는 것을 알고 있지만 불행히도 이것은 파일 이름 완성을 지원하지 않는 것 같습니다.
답변1
SIGTSTP가 대시 자체가 아닌 대시에서 실행 중인 포그라운드 프로세스를 중지하도록 하려면 어떻게 해야 합니까?
당신이 원하는 것이 아닌가요? rlwrap
작업 테이블에 무엇이 있는지 알 수 있는 방법이 없으며 dash
그에 따라 해당 진정제 다트를 하위 프로세스 중 하나에 보낼 수 있습니다 dash
.
그러나 솔루션은 더 간단할 수 있습니다. CTRL+Z
키 누르기를 에 바인딩하여 전달 하면 dash
됩니다 .rlwrap-direct-keypress
.inputrc
그리고현재의 rlwrap
이것작동하지 않습니다그러나 rlwrap
모든 dash
터미널 설정( VSUSP
행 문자 포함)은 미러링되므로 rlwrap
키 누르기가 표시되지 않습니다.
여기 내 할 일 목록이 있습니다(참조https://github.com/hanslub42/rlwrap/issues/111)
한스( rlwrap
관리자)