zsh의 읽기 명령에서 오류가 발생했습니다.

zsh의 읽기 명령에서 오류가 발생했습니다.

zsh에서 명령을 실행하면 read -p 'erasing all directories (y/n) ?' ans오류가 발생합니다.

read: -p: no coprocess

그러나 bash에서는 프롬프트를 인쇄합니다. zsh에서 이 작업을 어떻게 수행합니까?

답변1

계속 사용할 수 있습니다 read. 프롬프트를 먼저 인쇄하세요. In은 사용할 프롬프트를 표시하는 대신 코프로세스에서 입력을 읽어야 함 zsh을 나타냅니다.-p

POSIX와 호환되는 다음을 수행할 수 있습니다.

printf >&2 '%s ' 'erase all directories? (y/n)'
read ans

ksh/zsh read 'var?prompt'또는 bash 와 마찬가지로 read -p prompt var프롬프트는 스크립트의 일반 출력을 오염시키지 않도록 stderr에서 표시됩니다.

답변2

아니면 zsh좀 더 비슷한 것

() {
  local compcontext='yn:yes or no:(y n)'
  vared -cp 'erasing all directories (y/n) ? ' ans
}

이를 통해 답변이 완료됩니다.

답변3

다음과 동일 ksh:

IFS= read -r 'ans?erasing all directories (y/n)? '

또한 에는 zsh예 /아니요 답변이 read있습니다 .-q

if read -q '?erasing all directories (y/n)? '; then
  rm -rf -- *(D/)
fi

yes를 입력하면 true가 반환되므로 를 누를 필요가 없습니다 Enter.

관련 정보