Emacs не будет читать стандартный ввод, если он не работает в пакетном режиме. Вместо этого вы можете использовать параметр командной строки для передачи формы Lisp, которую Emacs оценит сразу после инициализации:
emacs --eval '(shell-command "command1")'
Это выполнит command1
и захватит ее вывод в буфер с именем *Shell Command Output*
, который затем вы можете переименовать, отредактировать и так далее. пробовать.
После этого вы можете передать результат в command2
с помощью C-x h M-| command2 RET
; C-x h
вызывает mark-whole-buffer, чтобы область охватывала весь отредактированный текст, а M-|
вызывает shell-command-on-region
для выполнения command2
и выдачи содержимого региона на стандартный ввод. (Если вы восстановили любой из этих аккордов, просто вызовите соответствующую функцию напрямую через M-x function-name RET
; как и во всех интерактивных функциях Emacs Lisp, они будут использовать минибуфер для запроса необходимых аргументов.)
Как и в случае с shell-command
shell , команда shell-command-on-region
будет захватывать стандартный вывод в буфер *Shell Command Output*
, заменяя все, что там будет; если вы хотите сохранить отредактированный вывод command1
, переименуйте буфер перед вызовом command2
.)
Еще одно замечание: вам может быть полезно знать, что и shell-command
shell-command-on-region
принимают необязательный аргумент выходного буфера в качестве буфера или имени буфера; если буфер с указанным именем не существует, будет создан новый буфер с этим именем. См. Внутреннюю документацию (C-h f function-name RET
или M-x describe-function RET function-name RET
) для получения более подробной информации.