【发布时间】:2014-02-22 16:41:37
【问题描述】:
我正在尝试将 Emacs Lisp 作为另一种 shell 脚本语言,但遇到了一个奇怪的问题。我在一个名为 hello.el 的文件中编写了以下 Emacs Lisp 脚本,然后使其可执行:
#!/usr/local/bin/emacs --script
(princ "hello world\n")
当我运行它时,我得到了以下信息:
$ ./hello.el
./hello.el: line 2: princ: command not found
经过一些实验,我发现#! 下面的代码是由 Bash 运行的,或者至少是其他一些 shell,而不是 Emacs:
#!/usr/local/bin/emacs --script
foo=bash?
echo $foo
ls -l | sort | tail -1
$ ./hello.el
bash?
total 7984
这对我来说似乎很奇怪,因为在各种 Emacs 文档中有很多对 --script 选项的引用,当我直接使用它运行脚本时它工作正常(即当我将 /usr/local/bin/emacs --script hello.el 粘贴到我的终端时.
真正奇怪的是这个脚本完全按预期工作:
#!/usr/bin/emacs --script
(princ "hello world\n")
但我使用/usr/local/bin/emacs 的原因是它是一个较新的版本; /usr/bin/emacs 的版本是 Apple 提供的随 Mac OS X 一起提供的 Emacs,而 /usr/local/bin/emacs 的版本是通过 brew 安装的,并且更新的版本(Emacs 24 vs 22)。
这里出了什么问题? Emacs 22 和 24 之间有什么变化吗?
【问题讨论】: