如何从shell运行组织模式命令?
我想通过bash脚本运行org模式命令。例如,在我定义的项目下,我有几个组织模式文件要导出为html。然后我将文件同步到web服务器等。出于这个原因,在不打开emacs并将文件导出为html文件的情况下,我希望从bash脚本执行此操作 如何运行组织模式命令,如如何从shell运行组织模式命令?,shell,emacs,Shell,Emacs,我想通过bash脚本运行org模式命令。例如,在我定义的项目下,我有几个组织模式文件要导出为html。然后我将文件同步到web服务器等。出于这个原因,在不打开emacs并将文件导出为html文件的情况下,我希望从bash脚本执行此操作 如何运行组织模式命令,如 M-x org-publish-project 然后输入项目名称,比如说,试用项目。如何在shell脚本中执行此操作?您可以编写一个elisp函数,打开必要的缓冲区,然后进行导出。然后,如果您的emacs正在运行,您可以使用EmacCl
M-x org-publish-project
然后输入项目名称,比如说,试用项目。如何在shell脚本中执行此操作?您可以编写一个elisp函数,打开必要的缓冲区,然后进行导出。然后,如果您的emacs正在运行,您可以使用
EmacClient-e…
运行该函数。如果您的emacs没有运行,并且您希望直接从命令行运行函数,则可以使用emacs--batch--eval…
来运行函数 我发布了这样一个项目:
emacs -batch --load publish-doc.el --eval '(org-publish "publish-doc")'
其中publish doc.el
包含“publish doc”项目的定义。如果您可以使用ssh连接到服务器,您甚至可以将发布目录
设置为远程:org将使用tramp
复制文件
publish doc.el
应在必要时初始化组织模式并定义项目-详细信息可能取决于您是使用emacs附带的组织模式,还是使用MELPA或git repo的上游版本。但是,您应该能够模仿您在正常初始化中所做的操作,并让它运行起来。在我的例子中,我必须修改我的加载路径来查找org,因为我从上游git repo克隆:您可能根本不需要它,但如果您确实需要它,您将需要修改加载org的路径。下面的minimalpublish doc.el
将~/org
中的一组组织文件发布到~/public\u html
-这是根据一个修改的,只是我必须添加发布功能:
(add-to-list 'load-path "~/src/emacs/org/org-mode/lisp/")
(require 'org)
(require 'ox-html)
(setq org-publish-project-alist
'(("org"
:base-directory "~/org/"
:publishing-directory "~/public_html"
:publishing-function org-html-publish-to-html
:section-numbers nil
:with-toc nil
:html-head "<link rel=\"stylesheet\"
href=\"../other/mystyle.css\"
type=\"text/css\"/>")))
嗯
编辑:如注释中所述,使用
-batch
时,必须加载初始化文件:-batch
表示-q
,因此不会加载.emacs
或等效文件。您可以使用-l~/.emacs
,但它通常包含许多无关的内容,因此在准备从命令行运行的脚本时,大多数人更喜欢使用只包含手头任务所需内容的精简初始化文件(参见上面的publish doc.el
文件).我想先导出到本地文件夹,然后通过重新同步将文件同步到服务器。然而,当我从shellemacs--batch--eval'(组织发布项目“试用项目”)运行时,
我得到以下错误“Symbol的函数定义为void:org发布”。你能解释一下关于publish doc.el的更多信息吗?编辑了答案,添加了一个例子。希望有帮助。谢谢你提供的详细信息,但我仍然有问题。您在publish-doc.el中提到的函数在my.emacs文件中定义。因此,在不加载函数的情况下,我运行了emacs--batch--eval'(org publish项目“org”)
,但仍然得到错误代码“Symbol的函数定义为void:org publish”您运行的是哪个版本的组织模式?是否包含(require…
行?当我在emacs中运行命令时,一切正常。例如,在emacs中,M-x org publish project RET org
以及定义文件夹中转换为html文件的所有组织文件。唯一的问题是,我无法从shell命令执行此操作。我本来打算将.emacs文件的相关部分发送给您,但我无法发送,因为该文件太长,无法发表评论。版本为(elpa)org-20170925/。我在你的评论后添加了(require'org),但仍然收到同样的警告。
emacs -batch -l publish-doc.el --eval '(org-publish "org")'