Isso responde à pergunta "por que isso acontece?"
Sim, somefile.txt
será realmente criado antes que ls
seja executado.
$ utility >file
A primeira coisa que acontece é que o shell percebe o redirecionamento, cria file
(ou trunca se já existir), então executa utility
com seu fluxo de saída padrão entrando em file
.
O utilitário geralmente não está ciente ou preocupado com onde sua saída padrão está indo (alguns, como ls
, verificam se é um TTY ou não e mudam seu comportamento de acordo), então não importa seja escrevendo para um arquivo, canal, arquivo de dispositivo ou soquete comum. Certamente não está preocupado em criar este arquivo. Portanto, o trabalho do shell é garantir que o encanamento esteja em vigor antes que o processo seja iniciado, o que inclui a criação ou o truncamento do arquivo denominado file
no exemplo acima.
Para as respostas que tratam do problema relacionado à exclusão de todos os arquivos, exceto os mais recentes, consulte a pergunta " remove os arquivos mais antigos "