Uma variação na resposta do geekosaur:
Você pode querer que read -n 1 byte
leia um byte de cada vez, então faça algo com $byte
.
EDITAR:
Apenas tentei isso, pois nunca tinha usado esse comando antes (apenas procurei info bash
), mas parece eliminar todos os espaços em branco e terminações de linha. Eu não tenho uma explicação para isso ainda.
Experimente os seguintes scripts para ajustar os argumentos do comando:
(for j in $(seq 1 10); do for i in $(seq 1 100); do echo -n "$i, "; sleep .02; done; echo "& $j."; done) | (while read line; do echo $line; done)
(for j in $(seq 1 10); do for i in $(seq 1 100); do echo -n "$i, "; sleep .05; done; echo "& $j."; done) | (while read -n 1 byte; do echo -n "$byte"; done)
Então, infelizmente, isso não dá o resultado esperado.
EDIT (com a ajuda de Chris):
(for j in $(seq 1 10); do for i in $(seq 1 100); do echo -n "$i, "; sleep .02; done; echo "& $j."; done) | (while IFS= read -N 1 byte; do echo -n "$byte"; done)
Isso dá exatamente o resultado esperado.
Nota: se eu uso -n
, -N
ou -rN
não altera o resultado, está tudo bem (com texto, eu não testei a limitação que o Chris fala: 0x00 e 0xff).