Contrast this: $ emacs --batch --eval '(message "to stderr.")' > /dev/null to stderr. With that (it produces no output): $ emacs --batch --eval '(princ "to stderr?" t)' > /dev/null And yet according to the docs: Any Lisp program output that would normally go to the echo area, either using message, or using prin1, etc., with t as the stream, goes instead to Emacs’s standard error descriptor when in batch mode. -- https://www.gnu.org/software/emacs/manual/html_node/elisp/Batch-Mode.html What am I doing wrong? Clément. In GNU Emacs 25.1.50.7 (x86_64-pc-linux-gnu, GTK+ Version 3.18.9) of 2016-07-20 built on clem-w50-mint Repository revision: a1a0c208e3e895a6ea0942e8e5c4077faf12c7ad Windowing system distributor 'The X.Org Foundation', version 11.0.11803000 System Description: Linux Mint 18 Sarah