Funciona para mim sem o subnível:
% echo foobar | read -k3 -u0; echo $REPLY
foo
% echo $ZSH_VERSION
5.5.1
No bash, se eu quisesse ler, digamos, 3 caracteres de um pipe, eu poderia fazer:
... | read -n3
Em zsh's read
, a opção mais próxima parece ser -k
:
-k
[ num ]
Read only one (or num) characters. All are assigned to the first name, without word splitting. This flag is ignored when-q
is present. Input is read from the terminal unless one of-u
or-p
is present. This option may also be used within zle widgets.Note that despite the mnemonic ‘key’ this option does read full characters, which may consist of multiple bytes if the option
MULTIBYTE
is set.
E para -u
e -p
:
-u
n
Input is read from file descriptor n.
-p
Input is read from the coprocess.
Um echo foobar | (read -k3; echo $REPLY)
nulo trava aguardando entrada. -p
falha com
%código%. Apenas os seguintes trabalhos:
echo foobar | (read -k3 -u0; echo $REPLY)
Esta é a primeira vez que vejo algo que é mais difícil de conseguir no zsh do que no bash.
Existe uma maneira mais simples de ler N caracteres de stdin (o que quer que seja) do que isso?
Funciona para mim sem o subnível:
% echo foobar | read -k3 -u0; echo $REPLY
foo
% echo $ZSH_VERSION
5.5.1