Estou tentando canalizar uma string com caracteres especiais (por exemplo, HG@eg3,l'{TT\"C!
para outro comando ( termux-clipboard-set ) com o read
programa. Parece que read
foi projetado para criar uma variável temporária (por exemplo read temp
) que deve ser então passada para outro comando (por exemplo termux-clipboard-set $temp
).
Gostaria de saber se existe uma maneira mais rápida de fazer isso com um cano, como: read | termux-clipboard-set
?
ATUALIZAÇÃO: Desculpe, esqueci de mencionar que estou procurando algo que funcione no bash (termux).
Pois
bash
,read
não é um programa.read
é um embutido. Simplificado,read
lêstdin
e atribui essa entrada a uma variável. Oread
built-in não produz nenhuma saída onstdout
, portanto, tentar canalizarstdout
para algo não produz nada.A questão é por quê. De acordo com a
man
página,Se o texto for lido
stdin
, por que você colocaria algo na frente? Claro, você poderiacat | termux-clipboard-set
, mas simplesmentetermux-clipboard-set
resolveria o problema.Em
zsh
, onde oread
builtin suporta uma-e
opção parae
cho:Se o seu sistema ainda tiver um
line
comando (ainda existe umutil-linux
, mas geralmente não está incluído atualmente), com qualquer shell do tipo POSIX:Esse
line
comando pode ser escrito como uma função sh como:head -n 1
faz algo semelhante, exceto que, quando não estiver lendo de um terminal, a maioria das implementações leria por blocos¹ e então poderia ler mais de uma linha de sua entrada, mesmo que produzissem apenas uma linha.read
eline
é garantido que não (embora você precise usar a-r
opção forread
).Com a entrada vinda de um terminal,
Deve funcionar embora. A maioria
head
das implementações ainda suporta o obsoleto (mas mais curto)head -1
.Com tcsh, isso é:
¹ eles também leem blocos de dispositivos terminais, mas
read()
s em dispositivos terminais noicanon
modo não retornam mais de uma linha.