在 zsh 中,运行命令read -p 'erasing all directories (y/n) ?' ans
,抛出错误,
read: -p: no coprocess
但在 bash 中,它会打印提示。我如何在 zsh 中执行此操作?
答案1
您仍然可以使用read
,只需先打印提示即可。在 中zsh
,-p
指示应从协进程读取输入,而不是指示要使用的提示。
您可以执行以下操作,这符合 POSIX 标准:
printf >&2 '%s ' 'erase all directories? (y/n)'
read ans
与 ksh/zshread '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
'sread
有-q
是/否答案:
if read -q '?erasing all directories (y/n)? '; then
rm -rf -- *(D/)
fi
如果您输入 yes 则返回 true 并且不需要您按Enter。