Macete para apagar conteúdo de arquivo sem excluí-lo
Podem ocorrer situações em que se faz necessário apagar todo o conteúdo de um arquivo, porém, sem apagá-lo. E apagar o arquivo e criá-lo novamente, é muito trabalhoso e um tanto quanto amador. :)
Usar o comando echo > arquivo.txt faz com que o conteúdo do arquivo seja apagado, e em seu lugar fique apenas um caractere de nova linha.
Exemplo:
echo texto > arquivo.txt
$ cat arquivo.txt
texto
echo > arquivo.txt
$ cat arquivo.txt
Usar a opção "-n" do comando echo faz com que o caractere de nova linha nem chegue a aparecer, fazendo com que o arquivo fique completamente vazio, apesar de ainda existir.
Exemplo:
echo linux > arquivo.txt
$ cat arquivo.txt
linux
echo -n > arquivo.txt
$ cat arquivo.txt
Em ambas abordagens, ocorreu o seguinte:
A saída do comando foi redirecionada com sobrescrita (>) para um arquivo. Significa dizer que o resultado do comando substituirá o conteúdo do arquivo.
Acontece que o bash, por padrão, primeiro faz a operação de sobrescrita, para depois executar o comando. Disto isto, podemos concluir que, mesmo que não exista um comando propriamente dito, a sobrescrita invariavelmente acontece.