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'