如何管道到 zsh 读取?

How pipe to zsh read?

有了bash一切都很好:

$ yes | bash -c 'read -sn 1 -p "[Y/n] " RESPONSE ; echo $RESPONSE'
y

但是使用 zsh 我遇到了麻烦:

$ yes | zsh -c 'read -sk 1 "RESPONSE?[Y/n] " ; echo $RESPONSE'
[Y/n]

当使用 -k 选项时,zsh 的 read 命令将从终端读取,除非另有说明。这记录在 zshbuiltins 联机帮助页的相应部分中。您的管道正在为脚本提供标准输入,但这对从终端读取的尝试没有影响。

您可以将 -u 0 添加到对 read 的调用中,以告诉它从标准输入(文件描述符 0)读取,即使其他选项(例如 -k)会导致它可以从其他地方读取。