zsh에서 한 줄의 사용자 입력을 읽는 더 좋은 방법은 무엇입니까? (예 : zle?)


11

Zsh read는 어떤 이유로 키 입력 ^M으로 받아들이지 않고 echo'ing <Enter>입니다. -d설정되어 있으면 로 인식 <Enter>되지만 여전히 반향됩니다. 백 스페이스 키와 같은 기본 기능도 지원하지 않습니다.

해킹 / 달리기를 통해이 문제를 해결할 수 있습니다 bash.

> a=$(bash -c 'read -e -p "What would you like to do?: " tmp; echo $tmp')
What would you like to do?: eat cake
> echo $a                                                                
eat cake

그러나 더 깨끗한 방법이 있는지 궁금합니다.


새로 zsh설치 한 4.3.10 설치 에서는 확인할 수 없습니다 . % read a여기서 잘 작동합니다.
user1686

이것은 OS X에서 iterm을 사용하고 있습니다. readLinux 컴퓨터에서 작동합니다.
Nicholas Tung

답변:


19

zsh에서 텍스트를 편안하게 입력하려면을 사용하십시오 vared. vared대신에를 사용 read하면 zle 이 호출됩니다 . 이는 -ereadline을 호출하기 위해 bash를 전달하는 것과 같습니다 .

vared -p 'What would you like to do?: ' -c tmp

평범하게 설명하는 동작 read은 쉘 문제가 아니라 잘못 구성된 터미널처럼 보입니다. 실행 stty -a하여 터미널 설정을 표시 하고 키 설정으로 eol설정되어 있는지 확인하십시오 . 운영 체제와 설정 방법 및 터미널에 따라 또는을 보냅니다 . 백 스페이스 설정은 수동으로 설정하려는 일부 구성 파일로 인해 일반적으로 잘못되므로, 먼저 구성 설정을 추적하고 제거해야합니다. 아무것도 발견되지 않으면 터미널 에뮬레이터의 설정을 검토하여 이전 버전의 호환성 모드로 설정되어 있지 않은지 확인하십시오. 다른 모든 방법이 실패하면 다음과 같이 추가하십시오 .^MeraseBackspaceBackspace^H^?~/.zshrc

if [[ $(ps -o comm= $PPID) = iterm ]]; then
  stty erase '^?'
fi

1
vared -p '무엇을 하시겠습니까? :'-c tmp
zzapper

너무 멋져요! vared내장 에 대해 몰랐습니다 . , 알고 보니 zshzle사람이 페이지를 통해 적어도 감추고에서 확실히 가치가있다.
ratijas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.