如何在组织模式源代码块中包含shell命令的输出?


12

例如,我得到了一个演示以显示命令及其输出,并希望将其插入.org文件中,例如C或类似的源代码片段。然后,我希望能够将文件导出到HTML文件,并像许多书籍中的示例一样突出显示块。

例如,我有

#+BEGIN_SRC shell
$ ls
dir1
dir2
file1
file2
...
or any other examples like this
...
#+END_SRC

但无法将其转换为HTML:读取以下错误消息

shell-mode:错误的参数类型:processp,nil

一直显示。我应该使用哪种模式来替换shell,如果不使用该#+BEGIN_SRC...#+END_SRC格式,应该使用什么模式呢?

Answers:


16

如果您想自己构造示例(这就是我从您的问题中得到的结果,但是如果我错了,请纠正我),请使用一个EXAMPLE块而不是一个SRC块:

#+BEGIN_EXAMPLE
$ ls
dir1
dir2
file1
file2
...
#+END_EXAMPLE

导出为HTML时,此块变为:

<pre class="example">
$ ls
dir1
dir2
file1
file2
...
</pre>

如您所见,导出块的内容与原始EXAMPLE块的内容完全相同。


如果您实际上想运行一个或多个命令来动态产生输出并将这些命令和结果都包含在HTML文档中,则需要将代码SRC块修改为如下所示:

#+BEGIN_SRC sh :exports both
ls
#+END_SRC

如果输出ls命令包括您在您的示例中列出的目录和文件(dir1dir2file1file2),这将出口到:

<div class="org-src-container">
  <pre class="src src-sh">
    ls
  </pre>
</div>

<table>
  <colgroup>
    <col class="left" />
  </colgroup>
  <tbody>
    <tr>
      <td class="left">dir1</td>
    </tr>
    <tr>
      <td class="left">dir2</td>
    </tr>
    <tr>
      <td class="left">file1</td>
    </tr>
    <tr>
      <td class="left">file2</td>
    </tr>
  </tbody>
</table>

如您所见,代码本身包装在代码块中,结果列在表中。

请注意,您将需要sh通过以下方式显式启用对代码块的支持:

(require 'ob-sh)
(org-babel-do-load-languages 'org-babel-load-languages '((sh . t)))

这是因为在默认情况下组织巴贝尔只允许为Emacs Lisp代码块的支持(如解释在这里)。


谢谢你的帮助ob,我还有另外两个问题1:是否built-in shortcut可以插入一对BEGIN_EXAMPLE,比如<s then TAB插入除以BEGIN_EXAMPLE定义片段yasnippet2org-html-handle-links: Wrong type argument: stringp, nil更改后我得到了错误消息,BEGIN_EXAMPLE但仅此而已,我的组织文件中的链接肯定有问题,其中有很多,我如何使之org-export显示更多详细信息,例如导出失败时出现的行号错误??
CodyChan 2014年

解决您的第一个问题:是的,<e后面是TAB。有关完整列表,请参见“ 简单模板 ”。
itsjeyd 2014年

至于您的第二个问题:我不确定我明白您的意思。什么链接?您的原始示例中没有任何链接。作为一般性建议,请尝试首先获取一个最小的示例。将EXAMPLE答案中所示的块本身放入一个新文件中。不要添加任何其他内容。然后尝试将其导出,看看会发生什么。如果可行,请逐渐添加更多内容,并继续进行导出。如果您在某个时候遇到错误,您将知道您所做的最后一次添加(或更改)是导致此错误的原因。
itsjeyd 2014年

我的原始帖子的问题已由BEGIN_EXAMPLE解决。BEGIN_EXAMPLE错误是由org-export自身定位的,所以我知道这是BEGIN_SRC问题,但是在我的原始文件中还有更多内容之后org-export,仅显示org-html-handle-links: Wrong type argument: stringp, nil错误消息,而我不在确切位置。
CodyChan 2014年

@CodyChan我没有关注。如果要我查看要导出的文件的内容,请将其添加到问题中(以后可以再次将其删除)。
itsjeyd 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.