Eu só estava curioso para saber se existe uma maneira de obter informações não de, StdIn
mas de $EDITOR
- seja vim, nano, emacs ou até mesmo um editor que não seja de linha de comando (MacVim/TextMate). Quais são as opções/soluções alternativas/melhores práticas?
Basicamente, eu gostaria de um fluxo de trabalho como heredoc
- mas do $editor.
$ sort -nr << FOO | uniq -c
pipe heredoc> foo
pipe heredoc> bar
pipe heredoc> baz
pipe heredoc> foo
pipe heredoc> FOO
2 foo
1 baz
1 bar
Responder1
O comando vipe
no pacotemaisutilspermite iniciar $EDITOR no meio de um pipeline.
Você pode obter o comportamento desejado assim:
$ </dev/null vipe |sort -nr | uniq -c
Responder2
Acho que sua única chance de fazer funcionar com qualquer tipo de editor é usar arquivos temporários:
FILE=$(mktemp); $EDITOR "$FILE"; <"$FILE" …command… ; rm "$FILE"
(No entanto, isso não permite iniciar o comando antes que uma entrada completa seja fornecida.)
Além disso, você pode usar echo "# please insert your input bellow" >"$FILE"
antes da chamada para $EDITOR
inserir um comentário que aparecerá dentro do editor. Certifique-se de que isso não afetará o comportamento do comando (ou peça ao usuário para removê-lo explicitamente).
Responder3
O Emacs tem a possibilidade de executar o shell em um de seus buffers (use o shell MX). Mas os processos lançados ainda receberiam sua entrada do stdin, seu stdin seria simplesmente um pseudoterminal cuja outra extremidade seria o emacs.
Responder4
No Emacs você pode executar qualquer comando e fornecer o conteúdo de um dos buffers do Emacs (região selecionada para ser exato) como stdin para o aplicativo.
Por exemplo, se o conteúdo do seu buffer Emacs for ls
e você o marcar como região (usando C-SPC
), então execute shell-command-on-region
( M-|
) e digite como comando bash
(combinação completa: M-| command RET
) será ls
executado bash
e a saída será aberta como um novo buffer.
Se você usar C-u M-| command RET
na região, a saída substituirá o comando marcado em seu buffer atual.