Primeiro, você recebe o erro porque está usando um editor de texto para isso. Isso significa que toda vez que você abrir o arquivo, editá-lo e salvá-lo, o original será substituído pelo novo conteúdo. Se você adicionou uma única linha ao final ou 100 linhas em todo o lugar é irrelevante, o ponto é que o arquivo está sendo aberto, editado e salvo e que sobrescreve o conteúdo.
Por exemplo, compare seu fluxo de trabalho para executar isso:
for((i=0;i<20;i++)); do echo $i >> file.txt; sleep 1; done
Isso gravará um número em file.txt
a cada segundo por vinte segundos. Se você abrir outro terminal e executar tail -fn 0 file.txt
, verá a saída esperada.
Assim, para obter o comportamento desejado, adicione o texto ao arquivo usando >>
de um terminal, em vez de editá-lo manualmente.
Mais detalhes
nano
parece ser o estranho aqui fora. A maioria dos editores ao abrir um arquivo e salvá-lo, na verdade, excluirá o arquivo original e salvará um novo com o mesmo nome. Você pode testar isso verificando o número do inode do arquivo:
$ ls -il file.txt
16647801 -rw-r--r-- 1 terdon terdon 9 Apr 6 18:19 file.txt
Os arquivos são simplesmente hardlinks para inodes específicos, neste caso, file.txt
aponta para inode 16647801
. Agora, abra o arquivo em gedit
, adicione uma linha e verifique o inode novamente:
$ gedit file.txt
$ ls -il file.txt
16647854 -rw-r--r-- 1 terdon terdon 13 Apr 6 18:23 file.txt
Como você pode ver, o número do inode foi alterado, em outras palavras, o arquivo original foi removido e um novo foi criado. nano
não faz isso, tentando a mesma coisa com nano
não altera o inode. No entanto, exclui o conteúdo original, sobrescrevendo-os com o novo conteúdo. É por isso que tail
mostra a saída, se você tentar e editar o arquivo com gedit
(ou emacs
ou vários outros editores), as linhas extras adicionadas não serão mostradas na saída de tail
de todo.