ZSH: Read command fails within bash function "read:1: -p: no coprocess"

The –p option doesn’t mean the same thing to bash’s read built-in command and zsh’s read built-in command.  In zsh’s read command, –p means –– guess –– “Input is read from the coprocess.”  I suggest that you display your prompt with echo or printf.

You may also need to replace –n 1 with –k or –k 1.


The zsh equivalent of bash's read -p prompt is

read "?Here be dragons. Continue?"

Anything after a ? in the first argument is used as the prompt string.

And of course you can specify a variable name to read into (and this may be better style):

read "brave?Here be dragons. Continue?"
if [[ "$brave" =~ ^[Yy]$ ]]
then
    ...
fi

(Quoting shell variables is generally a good idea, too.)


This code seems to do what you want in zsh.
(Note that the question you refered to explicitly mentions it is for bash).

#!/usr/bin/env zsh

test()
{
  echo -n "Here be dragons. Continue?"
  read REPLY

  if [[ $REPLY =~ ^[Yy]$ ]]
  then
    echo "You asked for it..."
  fi
}

test

Three comments: