O problema é com o uso incorreto de exit 127
em seu loop for, que está saindo após a primeira iteração for-loop. Você precisa agrupar a instrução echo
e o exit
como um bloco composto em {..}
para evitar isso.
echo "$user" >> USERS.txt || { echo "writing to USERS.txt failed"; exit 127; }
Sem esse agrupamento, o que acontece é que ||
defined se aplica somente para o comando echo
e sempre executa o comando exit
, não importa se redirecionar para arquivo passado ou falhou porque você tem um separador de comando ;
definido lá.
Agora, com o agrupamento composto ativado, todo o conjunto de ações dentro de {..}
é tratado como um bloco e ambos são executados se a ação de gravação para USERS.txt
falhar.