How can I prompt for yes/no style confirmation in a zsh script?

社会主义新天地 提交于 2020-01-12 05:41:07

问题


Using zsh, I'm trying to put a step in my ~/.zprofile where I interactively ask a yes/no style question. At first I tried this bash-style approach, but I saw errors of this form:

read: -p: no coprocess

(I'm aware that typically the zsh syntax is different from bash's - I tried preceding it with a sh emulation command - emulate -LR sh - but it made no difference).

This page implied the syntax might be different, so guided by this page and the zsh man page, I tried this instead:

read -q REPLY?"This is the question I want to ask?"

This instead fails with an error of the form:

/home/user/.zprofile:5: no matches found: REPLY?"This is the question I want to ask?"

How can I ask a simple yes/no question with zsh? Ideally the command would just swallow one character, with no need to press Enter/Return, and be 'safe' - i.e. the subsequent test defaults to no/false unless 'Y' or 'y' are entered.


回答1:


From zsh - read

If the first argument contains a ‘?’, the remainder of this word is used as a prompt on standard error when the shell is interactive.

You must quote the entire argument

read -q "REPLY?This is the question I want to ask?"

this will prompt you with This is the question I want to ask? and return the character pressed in REPLY.

If you don't quote the question mark, zsh tries to match the argument as a filename. And if it doesn't find any matching filename, it complains with no matches found.




回答2:


See ZSH Manual for documentation of ZSH's read. Try:

read REPLY\?"This is the question I want to ask?"


来源:https://stackoverflow.com/questions/15174121/how-can-i-prompt-for-yes-no-style-confirmation-in-a-zsh-script

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!