捕获" diff"的输出与组织巴贝尔

时间:2014-12-04 21:30:13

标签: emacs sh org-mode org-babel

我正在尝试使用org-babel捕获diff的输出,但由于某种原因它无法正常工作。对于文件

1

a b c

2

a c b
从命令行调用的

diff 1 2返回

1c1
< a b c
---
> a c b

但是对于org-babel,没有:

#+begin_src sh                                                                                                                                                 
diff 1 2                                                                                                                                                       
#+end_src                                                                                                                                                      

#+RESULTS:

迷你缓冲区显示“代码块没有产生输出”。 org-babel错误输出窗口为空。其他命令(如ls)按预期显示输出。我对org-babel并不熟悉。

我尝试使用:results output verbatim,没有任何更改。我还尝试使用:results output replace作为建议here。没有帮助。

  • Emacs版本为24.4.1(在Debian jessie上)
  • 组织模式版本是8.2.10

2 个答案:

答案 0 :(得分:8)

我可以重现你的问题(在OSX上)。

奇怪的是执行babel块会打开 Org-babel错误输出缓冲区,好像有什么东西要去STDERR。

如果在diff之后添加任何其他输出,结果将显示OK。例如,

#+begin_src sh :results output
diff 1 2
echo
#+end_src

如果你强制差异的结果为stdout,结果也会显示:

#+begin_src sh :results output
diff 1 2 | cat
#+end_src

答案 1 :(得分:2)

当返回码不是org-babel时,看起来像0不喜欢它。这就是各种解决方案起作用的原因。使用添加另一个命令意味着该块的总体错误代码成功。类似地,将管道传递到cat中会使管道返回错误代码cat。解决错误情况的另一种方法是:

  diff 1 2 || true