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