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) для получения более подробной информации.