O comando vipe
no pacote moreutils permite lançar $ EDITOR no meio de um pipeline
Você pode obter o comportamento desejado assim:
$ </dev/null vipe |sort -nr | uniq -c
Eu estava curioso para saber se há uma maneira de obter entrada não de StdIn
, mas de $EDITOR
- seja vim, nano, emacs ou até mesmo um editor 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 com heredoc
- mas do editor $ em vez disso.
$ 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
O comando vipe
no pacote moreutils permite lançar $ EDITOR no meio de um pipeline
Você pode obter o comportamento desejado assim:
$ </dev/null vipe |sort -nr | uniq -c
Eu acho que sua única chance de fazê-lo 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
para inserir um comentário que será exibido dentro do editor. Certifique-se de que isso não afetará o comportamento do comando (ou peça ao usuário para explicitamente removê-lo).
O Emacs tem a possibilidade de executar o shell em um de seus buffers (use o shell M-X). Mas os processos iniciados ainda receberiam sua contribuição do stdin, seu stdin seria simplesmente um pseudo-terminal cujo outro fim seria o emacs.
No Emacs você pode executar qualquer comando e fornecer 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
), execute shell-command-on-region
( M-|
) e digite como comando bash
(combinação completa: M-| command RET
) haverá ls
executada em bash
e a saída será aberta como novo buffer.
Se você usar C-u M-| command RET
na região, a saída substituirá o comando marcado no seu buffer atual.