用org-babel捕获“ diff”的输出

问题描述 投票:9回答:2

我正在尝试使用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
emacs sh org-mode org-babel
2个回答
10
投票

我可以在OSX上重现您的问题。

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

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

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

如果将diff的结果强制为标准输出,结果还将显示:

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

0
投票

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

  diff 1 2 || true
© www.soinside.com 2019 - 2024. All rights reserved.