Isso produz resultados inesperados:
tail file.txt > file.txt && echo $(date) >> file.txt
O primeiro redirecionamento trunca o arquivo antes que o processo final seja iniciado, de modo que o tail agora está operando em um arquivo vazio. ( ref )
2 sugestões:
-
um arquivo temporário:
f=file.txt tmp=$(mktemp) { tail "$f"; date; } > "$tmp" && mv "$tmp" "$f"
-
f=file.txt { tail "$f"; date; } | sponge "$f"
Observe que echo $(date)
é redundante: você não precisa de echo
para enviar a saída de date
para stdout - date
faz isso por padrão.