Você está redirecionando a saída de screen . É por isso que test.txt está vazio.
Na verdade, o $ é passado como um argumento para echo . A tela do shell que você está chamando encontra \$ , resultando na string de um caractere $ sendo um argumento de echo . A tela executa echo , que exibe $ na janela da tela. Imediatamente depois disso, o programa retorna e assim a janela se fecha.
Observe que, se você quiser usar construções de shell para o que é executado na janela de tela, será necessário invocar um shell explicitamente.
screen -d -m sh -c 'echo \$ >test.txt'