whilepossui uma sintaxe de interação. Você pode colocar vários comandos antes do do ... whileloop, e o caso em questão pode precisar manipular esse recurso, dependendo dos requisitos específicos de: você lê o final do arquivo mais longo ou apenas o final do mais curto?
Por exemplo, read || readsimplesmente não funciona (conforme os requisitos da pergunta), pois quando uma leitura do primeiro arquivo é true, a leitura do segundo arquivo é ignorada até que o primeiro arquivo seja lido do início ao fim ... Então, porque o status ainda é true, o loop while continua e lê o segundo arquivo do início ao fim.
read && readlerá os arquivos simultaneamente (de forma síncrona) se você quiser apenas ler o arquivo mais curto. No entanto, se você quiser ler os dois arquivos eof, precisará trabalhar com os while'srequisitos de sintaxe, por exemplo. pelo comando imediatamente antes do do whileloop, produzindo um código de retorno diferente de zero para interromper o loop while.
Aqui está um exemplo de como ler os dois arquivos no eof
while IFS= read -r line3 <&3 || ((eof3=1))
IFS= read -r line4 <&4 || ((eof4=1))
!((eof3 & eof4))
do
echo "$line3, $line4"
done 3<file3 4<file4
(você pode testar eof3 e eof4 antes da leitura, mas a ideia geral está lá, especialmente na condição final verdadeiro / falso.
||não funciona para mim. Ele processar file1 então file2 , mas ele faz manter os arquivos sincronizados com&&, que sai do enquanto ciclo após a primeira EOF . - GNU bash 4.1.5