O problema é que você ainda permanece no diretório atual quando você executa o script. Então, a linha
for file in *.txt
expandirá o glob ( *.txt
) para todos os arquivos de texto em seu diretório atual. É claro que, se o seu diretório atual ( não diretório do script!) Não tiver arquivos de texto, você não obterá nenhuma saída.
Se você quiser mudar para o diretório do script a partir do script (o que tornaria o trabalho *.txt
glob), consulte esta postagem sobre estouro de pilha: Pode um script Bash dizer em qual diretório está armazenado?
Enquanto estamos nisso - não se esqueça de citar "$file"
corretamente quando você usa para evitar um nome de arquivo com espaços de quebrar seus comandos. Não importa no seu caso porque echo
não se importa com os argumentos, mas é um bom hábito de se desenvolver.