O pipe conecta stdout
de um programa a stdin
de outro, portanto, no script, basta ler stdin
e você obterá o que o comando anterior imprimiu. Uma maneira simples de ler isso em uma variável é com cat, por exemplo, dentro de myprogram.sh
:
mypipevar="$(cat ${1:-/dev/stdin})"
echo "Obtained the value: '$mypipevar'"
No entanto, muitas vezes você quer processar as coisas linha por linha em vez de tudo de uma vez, isso pode ser feito com
while read line
do
echo "$line"
done < "${1:-/dev/stdin}"
Observe que ${1:-/dev/stdin}
fornecerá o primeiro argumento ou, se nenhum argumento for especificado, então /dev/stdin
, que conterá o conteúdo de stdin, que pode ser lido como um arquivo. Isso permite que você execute o script como command | script
ou simplesmente como script filename
.