zsh 中的读取命令抛出错误

zsh 中的读取命令抛出错误

在 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

相关内容