Qual é a maneira zsh de ler n caracteres de stdin?

3

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?

    
por muru 23.01.2017 / 13:59

1 resposta

0

Funciona para mim sem o subnível:

% echo foobar | read -k3 -u0; echo $REPLY
foo
% echo $ZSH_VERSION
5.5.1
    
por 27.06.2018 / 09:45

Tags