Edit:
Seems to work within bash
. It appears the problem is related to zsh
. If there is a better site to post this issue on let me know.
I am writing a simple script that creates a series of directories. I want the user to give a confirmation before I do so. I'm using the following as a basis, but cannot seem to get it to run within a bash function. If I put it outside of a function it works fine. Here is an isolated example:
read.sh
#!/bin/bash
test() {
read -p "Here be dragons. Continue?" -n 1 -r
if [[ $REPLY =~ ^[Yy]$ ]]
then
echo "You asked for it..."
fi
}
code from this SO post.
Sourcing the file and/or test
results in the following error: read:1: -p: no coprocess
. Same output when I place it in my .bashrc
Edit::
@hennes
- I want the function to be in a config file, so I can call it from whatever directory (ideally my .bashrc or .zshrc)
- I've corrected the formatting of the first commented line. Problem still exists in
zsh
- Bash version is 3.2, but you've helped me figure out that the problem is with zsh and not bash.
Best Answer
The
–p
option doesn’t mean the same thing tobash
’sread
built-in command andzsh
’sread
built-in command. Inzsh
’sread
command,–p
means –– guess –– “Input is read from the coprocess.” I suggest that you display your prompt withecho
orprintf
.You may also need to replace
–n 1
with–k
or–k 1
.The
zsh
equivalent ofbash
'sread -p prompt
isAnything 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):
(Quoting shell variables is generally a good idea, too.)