In zsh, running the command read -p 'erasing all directories (y/n) ?' ans, throws the error,

read: -p: no coprocess

But in bash, it prints a prompt. How do I do this in zsh?


You can still use read, you just need to print a prompt first. In zsh, -p indicates that input should be read from a coprocess instead of indicating the prompt to use.

You can do the following instead, which is POSIX-compliant:

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

or a more zsh-like way

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

Which allows completing the answer.


Same as in ksh:

read 'ans?erasing all directories (y/n) ?'

Also note that zsh's read has the -q for yes/no answers:

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

It returns true if your enter yes and doesn't require you to press Enter.

  • 1
    It should be noted that -q will not output a trailing newline after the user's reply. You need to do that yourself if you want one. – Kevin May 12 '16 at 20:18

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.