Оценить выражение 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 с помощью просто >.


попробовать

emacs --batch --eval '(print (+ 2 3))'