Isso acontece porque o redirecionamento > ocorre antes que o programa head seja iniciado. O redirecionamento > trunca o arquivo se existir, portanto, quando o head estiver lendo um arquivo, ele já estará vazio.
Dado um arquivo, foo.txt:
1
2
3
4
5
Digamos que queremos alterá-lo para conter:
1
2
3
Por que o head -n3 foo.txt > foo.txt deixa o foo.txt vazio?
Tags head io-redirection