O Emacs não lê a entrada padrão, a menos que esteja sendo executado em lote. Em vez disso, você pode usar uma opção de linha de comando para passar um formulário Lisp que o Emacs avaliará imediatamente após a inicialização:
emacs --eval '(shell-command "command1")'
Isso executará command1
e capturará sua saída em um buffer denominado *Shell Command Output*
, que você poderá renomear, editar, & c. a gosto.
Uma vez feito, você pode passar o resultado para command2
por meio de C-x h M-| command2 RET
; C-x h
chama mark-whole-buffer para que a região inclua todo o texto editado e M-|
chama shell-command-on-region
para executar command2
e fornecer conteúdo da região na entrada padrão. (Se você tiver recuperado qualquer um desses acordes, apenas chame a função relevante diretamente via M-x function-name RET
; como acontece com todas as funções interativas do Emacs Lisp, elas usarão o minibuffer para solicitar os argumentos de que precisam.)
Assim como com shell-command
, shell-command-on-region
capturará a saída padrão para o buffer *Shell Command Output*
, substituindo o que estiver lá; se você quiser manter a saída editada de command1
, renomeie o buffer antes de invocar command2
.)
Uma observação adicional: você pode achar útil saber que shell-command
e shell-command-on-region
recebem um argumento opcional de buffer de saída, como um buffer ou um nome de buffer; se um buffer pelo nome dado não existir, um novo buffer com esse nome será criado. Veja a documentação interna ( C-h f function-name RET
ou M-x describe-function RET function-name RET
) para mais.