Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从shell运行组织模式命令?_Shell_Emacs - Fatal编程技术网

如何从shell运行组织模式命令?

如何从shell运行组织模式命令?,shell,emacs,Shell,Emacs,我想通过bash脚本运行org模式命令。例如,在我定义的项目下,我有几个组织模式文件要导出为html。然后我将文件同步到web服务器等。出于这个原因,在不打开emacs并将文件导出为html文件的情况下,我希望从bash脚本执行此操作 如何运行组织模式命令,如 M-x org-publish-project 然后输入项目名称,比如说,试用项目。如何在shell脚本中执行此操作?您可以编写一个elisp函数,打开必要的缓冲区,然后进行导出。然后,如果您的emacs正在运行,您可以使用EmacCl

我想通过bash脚本运行org模式命令。例如,在我定义的项目下,我有几个组织模式文件要导出为html。然后我将文件同步到web服务器等。出于这个原因,在不打开emacs并将文件导出为html文件的情况下,我希望从bash脚本执行此操作

如何运行组织模式命令,如

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的路径。下面的minimal
publish 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
文件).

我想先导出到本地文件夹,然后通过重新同步将文件同步到服务器。然而,当我从shell
emacs--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")'