Se a resposta não precisar ser testada, basta fazer isso em apenas uma linha:
$ echo "Enter blah" && cat > output.txt
Enter blah
blah
# Press Ctrl+D to stop recording stuff into file
$ cat output.txt
blah
O que acontece aqui é que usamos echo para produzir texto na tela. && simplesmente é operador booleano e significa "se o comando anterior foi bem sucedido, execute o segundo". && não é importante aqui e ; pode ser usado da mesma forma. cat > output.txt é a parte divertida - sem nenhum arquivo especificado, o cat lerá stdin stream por padrão (que neste caso é o seu teclado) e repassará para stdout . O que > faz é enviar stdout stream para o arquivo. Então, basicamente, voltamos a conectar os fluxos de dados de um teclado para outro, em vez de um teclado para a tela do terminal, em apenas alguns caracteres de texto.
Isso não precisa necessariamente ser feito apenas no shell, isso pode ser feito com outras ferramentas, como python :
$ python -c 'import sys;print("Say hello");f=open("output.txt","w");[f.write(l) for l in sys.stdin.readlines()];f.close()'
Say hello
Hello AskUbuntu
# press Ctrl+D
$ cat output.txt
Hello AskUbuntu