Há uma distinção entre argumentos de linha de comando e entrada padrão. Um tubo conectará a saída padrão de um processo à entrada padrão de outro. assim
ls | echo
Conecta a saída padrão de ls à entrada padrão de eco. Tudo bem, certo? Bem, echo ignora a entrada padrão e despeja seus argumentos de linha de comando - que não são, neste caso, - seu próprio stdout. A saída: nada.
Existem algumas soluções nesse caso. Uma é usar um comando que lê stdin e despeja em stdout, como cat.
ls | cat
Irá 'funcionar', dependendo da sua definição de trabalho.
Mas e o caso geral. O que você realmente deseja é converter o stdout de um comando na linha de comando args de outro. Como já foi dito, xargs
é a ferramenta auxiliar canônica nesse caso, lendo os argumentos da linha de comando para obter um comando a partir do stdin e construindo comandos para execução.
ls | xargs echo
Você também pode converter isso alguns, usando o comando de substituição $()
echo $(ls)
Também faria o que você quer.
Ambas as ferramentas são essenciais para o shell script, você deve aprender as duas.
Para completar, como você indica na pergunta, a outra maneira básica de converter stdin em args da linha de comando é o read
comando interno do shell . Ele converte "palavras" (palavras definidas pela IFS
variável) em uma variável temp, que você pode usar em qualquer execução de comando.
ls | echo
fazer? por que não simplesmente correrls
?