Às vezes, preciso escrever um texto e depois canalizá-lo para outro comando. Meu fluxo de trabalho usual é mais ou menos assim:
vim
# I edit and save my file as file.txt
cat file.txt | pandoc -o file.pdf # pandoc is an example
rm file.txt
Acho isso complicado e procurando aprender scripts bash, gostaria de tornar o processo muito mais simples, escrevendo um comando que aciona um editor e, quando o editor fecha, direciona a saída do editor para o stdout. Então eu seria capaz de executar o comando como quickedit | pandoc -o file.pdf
.
Não tenho certeza de como isso funcionaria. Eu já escrevi uma função para automatizar isso, seguindo o fluxo de trabalho exato acima, além de algumas adições. Ele gera uma sequência aleatória para atuar como um nome de arquivo e a passa para o vim quando a função é chamada. Quando o usuário sai do vim salvando o arquivo, a função imprime o arquivo no console e exclui o arquivo.
function quickedit {
filename="$(cat /dev/urandom | env LC_CTYPE=C tr -cd 'a-f0-9' | head -c 32)"
vim $filename
cat $filename
rm $filename
}
# The problem:
# => Vim: Warning: Output is not to a terminal
O problema que encontrei logo é que, quando faço algo como o quickedit | command
próprio vim, não pode ser usado como editor, porque toda a saída é restrita ao canal.
Gostaria de saber se existem soluções alternativas para isso, para que eu possa canalizar a saída da minha quickedit
função. A alternativa subótima é acionar um editor separado, digamos texto sublime, mas eu realmente quero ficar no terminal.
mktemp
lo em vez de reinventá-lo de maneira insegura.
:w !pandoc -o file.pdf
? (Nota: o espaço entrew
e!
é essencial.) #