shell - Emacs shell 脚本 - 如何将初始选项放入脚本中?

标签 shell emacs command-line elisp options

受堆栈溢出问题的启发 Idomatic batch processing of text in Emacs?我尝试了一个 Emacs shell 脚本,标题如下:

#!/usr/bin/emacs --script 

我在其中放入了一些 Emacs Lisp 代码,并将其保存为文本文件 rcat。

由于 --script 选项不会阻止加载站点启动文件,因此我有很多
Loading /etc/emacs/site-start.d/20apel.el (source)...
Loading /etc/emacs23/site-start.d/35elib-startup.el (source)...
Loading /etc/emacs23/site-start.d/50auctex.el (source)...

Bash shell (stdout) 中的消息。我可以通过调用来防止这种情况
rcat --no-site-file

或者
rcat -Q

但不是通过更改脚本中的标题:
 #!/usr/bin/emacs --script --no-site-file

有没有办法在这样的脚本文件中将其他选项传递给 Emacs,而不是稍后在命令行上执行?

最佳答案

许多 unix 变体只允许在 shebang 行中对程序使用单个参数。悲伤,但真实。如果您使用 #!/usr/bin/env emacs以免依赖emacs的位置可执行文件,您根本无法传递参数。

Chaining scripts在某些系统上是可能的,但并非所有地方都支持。

您可以采用历史悠久的编写多语言脚本的方法:该脚本既是 shell 脚本又是 Emacs Lisp 脚本(例如 Perl 的 if $running_under_some_shell )。它确实看起来很hackish,但它确实有效。

Elisp 评论以 ; 开头, 在 shell 中将两个命令分开。所以我们可以使用 ;后跟一个切换到 Emacs 的 shell 指令,实际的 Lisp 代码从下一行开始。大多数 shell 不喜欢空命令,所以我们需要找到一些 shell 和 Emacs 都视为无操作的东西,放在 ; 之前。 . shell 无操作命令是 : ;你可以写":"就 shell 而言,Emacs 将其解析为顶级常量,这也是空操作。

#! /bin/sh
":"; exec emacs --no-site-file --script "$0" -- "$@" # -*-emacs-lisp-*-
(print (+ 2 2))

关于shell - Emacs shell 脚本 - 如何将初始选项放入脚本中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6238331/

相关文章:

emacs - 在我的 init 文件中禁用 aquamacs 的工具栏

c# - 无法以编程方式连接到 Mysql

ios - 通过命令行从 iOS 设备卸载应用程序

c# - 从任务管理器启动进程并隐藏命令行参数

shell - Hadoop - 只删除早于 X 天的文件

linux - Linux 端口中每秒的请求数

Emacs:在命令上定义自定义钩子(Hook)

linux - 我有一个日志文件,我需要在其中获取指定的输出,并且需要在 shell 脚本中编写逻辑

linux - 根据字典替换事件代码的 Shell 命令

python - emacs-ipython-notebook 和 SCIMAX