首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Emacs shell脚本-如何将初始选项放入脚本?

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

Stack Overflow用户
提问于 2011-06-05 01:34:06
回答 3查看 3.6K关注 0票数 21

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

#!/usr/bin/emacs --script 

我在里面放了一些Emacs和Lisp代码,并将它保存为文本文件rcat。

因为--script选项不会阻止加载site-start文件,所以我有很多

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传递额外的选项,而不是稍后在命令行中执行?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-05 11:50:47

您可以随时将#!/usr/bin/emacs更改为类似于#!/home/thorsten/bin/emacs-no-site-file的内容,并将其设置为:

#!/bin/sh
exec /usr/bin/emacs --no-site-file "$@"

如果这对您不起作用,或者如果您希望您的脚本是可移植的,那么请参阅Gilles' answer below以获得更健壮(稍微有点时髦:)的方法。

票数 13
EN

Stack Overflow用户

发布于 2011-06-07 07:53:36

许多unix变种只允许在shebang行上对程序使用单个参数。很悲哀,但这是真的。如果为了不依赖于emacs可执行文件的位置而使用#!/usr/bin/env emacs,则根本不能传递参数。

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

您可以按照历史悠久的方式编写多语言脚本:既是shell脚本又是Emacs Lisp脚本(例如,像Perl的if $running_under_some_shell )的脚本。它看起来确实很老土,但它确实有效。

Elisp注释以;开头,在shell中,它将两个命令分开。因此,我们可以使用;后跟shell指令来切换到Emacs,实际的Lisp代码从下一行开始。但是大多数shell不喜欢空命令,所以我们需要找到shell和Emacs都认为是无操作的东西,放在;之前。shell no-op命令是:;就shell而言,您可以将其写为":",Emacs在顶层将其解析为常量,这也是一个no-op。

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

Stack Overflow用户

发布于 2011-10-14 22:49:59

如果您在脚本模式下运行emacs,我建议您在脚本末尾将"argv“变量重置为nil,否则emacs将在脚本结束后尝试解释"argv”。

假设您有一个名为"test-emacs-script.el“的文件,其中包含以下内容:

#!/usr/bin/emacs --script
(print argv)
(setq argv nil)

尝试以"./test-emacs-script.el -a“的形式运行此脚本。如果运行此脚本时未重置"argv“(脚本中的最后一行),则输出将为:

("-a")
Unknown option `-a'

重置"argv“会消除”未知选项“的错误信息

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6238331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档