如何从shell获取user-emacs-directory的值?

时间:2016-04-20 20:02:25

标签: emacs

我正在编写一个脚本来自动安装一些elisp。我想找到user-emacs-directory的值,以便我可以将文件复制到正确的目录中。有没有办法从shell中做到这一点?

我希望它可以运行:

$ emacs --batch --eval="(print user-emacs-directory)"
Symbol's value as variable is void: user-emacs-directory

但是你可以看到这并不富有成效。然后我尝试首先加载.emacs文件:

$ emacs --batch -l ~/.emacs --eval="(print user-emacs-directory)"
Loading /Users/noah/dotfiles/emacs/init.el (source)...
Symbol's function definition is void: global-visual-line-mode

但那也会窒息。谷歌搜索还没有让我得到答案。有什么想法吗?

编辑:具体问题是我使用的是旧版本的Emacs(22.1.1)。运行Emacs 24.4.1有效:

$ emacs -l ~/.emacs --batch --eval="(print user-emacs-directory)" 2>/dev/null

"~/dotfiles/emacs"

(这是我在自己的~/.emacs文件中设置的自定义值)

请注意,我正在将stderr重定向到/dev/null以取消某些加载消息。

2 个答案:

答案 0 :(得分:2)

在Ubuntu附带的vanilla GNU Emacs 24.5.1上为我工作:

$ emacs -Q --batch --eval="(princ user-emacs-directory)"                                                                                                                            
~/.emacs.d/

注意princ而不是print,以避免额外的空格和引号。

答案 1 :(得分:0)

--batch隐含-q,这意味着 没有user-emacs-directory

编辑:呃。不,-q并不意味着这一点。正如sds指出的那样,建议的代码应该可行。这将教会我得出结论。我会删除这个答案,但由于某种原因,原来的方法显然不适用于Noah,我会留在这里,以防万一它仍有帮助...

通常你只想要$HOME/.emacs.d/

有关详情,请参阅 C-h i g (emacs) Find Init RET