Você pode ler a partir do stdout redirecionando a entrada do descritor de arquivo 1. O Stdout é o descritor de arquivo 1 por definição. O fato de o descritor de arquivo 1 ser usado para saída é uma questão de convenção, não uma obrigação técnica. No entanto, é uma coisa bizarra de se fazer, o que confunde as pessoas que usam o seu script.
read line <&1
Se você quiser ler um arquivo inteiro, use cat
. Para colocar o conteúdo em uma variável, use uma substituição de comando.
whole_input=$(cat)
whole_input_from_stdout=$(cat <&1)
Alguns shells permitem que você escreva $(</dev/stdin)
como um atalho um pouco mais eficiente para $(cat)
.
Observe que isso cria novas linhas. Esse comportamento é construído em substituição de comando. Para reter novas linhas, esconda-as atrás de outro personagem e remova-o.
whole_input=$(cat; echo .); whole_input=${whole_input%?}
A variável shell conterá apenas os dados até o primeiro byte nulo, se houver um byte nulo na entrada. Com alguns shells, você obterá todos os dados com os bytes nulos removidos. Shells não podem lidar com dados binários. Zsh é uma exceção, ele retém os bytes nulos.