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.