Você está usando o descritor de arquivos incorreto. 1
é stdout, 0
é stdin.
Alterar:
while read CMD <&1; do
para:
while read CMD <&0; do
E será do arquivo corretamente. No entanto, você não precisa fazer tudo isso, já que read
usa o padrão stdin:
while read CMD; do
Além disso, a opção -u
pode ser usada para ler um descritor de arquivo específico (pelo menos no bash). Então você pode fazer isso também:
while read -u 0 CMD; do