Оценить выражение Emacs lisp в командной строке
Я новичок в emacs. Я работаю с emacs-24.1 в redhat linux и пытаюсь оценить выражение elisp. Я хочу, чтобы emacs оценил выражение elisp без запуска самого emacs. Я пробую разные вещи
emacs --eval '(+ 2 3)'
Я не знаю, оценивает ли emacs выражение, но результат не отображается на консоли, и появляется окно emacs. Затем я попробовал это
emacsclient --eval '(+ 2 3)'
клиент Emacs ожидает сервер. Он не мог найти сервер и, следовательно, бросает ошибку (не может найти сокет. запустите сервер и т. д.). Поэтому я запустил сервер (имя сервера-сервер) и снова запустил emacsclient
emacsclient --server-file=SERVER -e '(+ 2 3)'
на этот раз emacs оценил выражение и напечатал результат на консоли. Это связано с тем, что emacs использует существующий сервер для оценки выражения. Теперь я получаю проблему, когда сервер не работает.
emacsclient --server-file=ANOTHER_SERVER -e '(+ 2 3)' -a emacs
на этот раз я не получаю никаких ошибок на консоли. Emacs запускает новое окно, потому что of - a (my .emacs имеет команду (server-start) в нем и имя сервера, установленное на ANOTHER_SERVER). Но emacs затем пытается отредактировать файл (+2 3). Он отображается в строке режима. Я в замешательстве. emacsclient -- help показал мне это
-e, --eval Evaluate the FILE arguments as ELisp expressions
и руководство emacs говорит это.
'-e'
'--eval'
Tell Emacs to evaluate some Emacs Lisp code, instead of visiting some files.
When this option is given, the arguments to emacsclient are interpreted as a
list of expressions to evaluate, not as a list of files to visit.
Я не знаю, как продолжить. Как я уже сказал, Моя цель-оценить выражение elisp без запуска emacs. Возможно ли это?
2 ответов
после небольшого тестирования, похоже, вы можете использовать --batch
чтобы emacs сбрасывал любые сообщения в stderr. Тогда вы можете позвонить message
для печати вещей в stderr, где вы сможете их увидеть. Ваш пример станет emacs --batch --eval '(message (number-to-string (+ 2 3)))'
и результат будет напечатан в stderr.
если вы пытаетесь перенаправить вывод в файл, вам нужно перенаправить stderr вместо stdout с помощью просто >
.