범용(POSIX) 셸에서 효과를 얻는 방법 read -e
(줄 편집을 활성화 readline
하고 사용 가능하게 하여) ? bash
나는 이 명령 때문에 POSIX 호환성을 잃고 싶지 않습니다.
답변1
readline
GNU 프로젝트입니다( 로 개발됨 bash
). BSD libedit와 같은 다른 대안이 있으며 모든 POSIX 셸에는 셸별 또는 vi
적어도 하나의 편집 모드(POSIX에서 지정한 유일한 편집 모드, 대부분 emacs
모드도 지원하지만)를 구현하는 라이브러리 기반의 자체 라인 편집기가 있습니다. POSIX는 RMS 개체를 지정하지 않습니다)).
그러나 POSIX는 셸 명령줄에 대한 줄 편집 모드만 지정하고 read
.
ksh93
그러나 이를 지원합니다 read
(단, stdin 및 stderr이 터미널 장치에 있는 경우). 여기에서 다음을 수행할 수 있습니다.
set -o emacs
IFS= read -r 'line?prompt: '
이에 상응하는 것은 (변수 편집기) 내장입니다 zsh
:vared
line=; vared -p 'prompt: ' line
이는 기록 처리와 키 바인딩 및 마감의 전체 사용자 정의 기능을 갖춘 가장 풍부한 기능을 제공합니다.
read -e
구체적 으로 말하세요 bash
.
IFS= read -rep 'prompt: ' variable
POSIX에 해당하는 것은 없습니다. POSIXly에서는 (POSIX에서 지정한 대로) 임시 파일 편집을 시작 vi
하고 해당 파일의 내용을 변수로 읽을 수 있습니다.
zsh
또는 // bash
또는 libreadline 또는 (support로 구축되었다고 가정 ) 주변의 다른 래퍼 중 하나의 가용성을 찾아 사용할 수 있는 경우 해당 래퍼 중 하나를 사용하여 줄을 읽거나 사용할 수 없는 경우 ksh93
으로 되돌릴 수 있습니다.rlwrap
socat
readline
read
vi
아니면 그걸 이용하세요LE
이 유사한 Q&A에서 라인 편집기 기능을 확인하세요.비슷한 제한된 줄 편집기를 구현합니다 emacs
.
답변2
POSIX는 (백슬래시 읽기 가능) read
만 지원합니다 . -r
나중에 구문 분석되는 파일에 대한 편집기를 시작하지 않는 한 사용자 입력을 요청하고 명령줄과 같은 편집을 제공할 수 있는 방법이 없습니다.