Diga a pessoa que sugeriu || que ele é um idiota. Usar || faz o snippet ler todas as linhas de fileA primeiro e, em seguida, todas as linhas de fileB , porque, contanto que read lineA retorne verdadeiro, read lineB não será executado. Em vez disso, chame read ambas as vezes, salvando o status de retorno e, em seguida, teste os status de retorno.
while
IFS= read -r lineA; statusA=$?
IFS= read -r lineB; statusB=$?
[ $statusA -eq 0 ] || [ $statusB -eq 0 ]
do …
Você pode testar $statusA e $statusB dentro do loop se precisar saber se um arquivo está esgotado (o conteúdo da linha estará vazio, mas isso não é distinguível de uma linha vazia). / p>