Emacs 捕获“的输出”;“差别”;用巴别塔
我试图用OrgBabel捕获Emacs 捕获“的输出”;“差别”;用巴别塔,emacs,sh,org-mode,org-babel,Emacs,Sh,Org Mode,Org Babel,我试图用OrgBabel捕获diff的输出,但由于某种原因,它不起作用。档案 一, 二, 从命令行调用的diff 1 2返回 1c1 < a b c --- > a c b 微型缓冲区读取“代码块未产生输出”。“组织巴别塔错误输出”窗口为空。其他命令,如ls按预期显示输出。我不熟悉巴别塔 我尝试使用:结果逐字输出,没有任何更改。我还尝试按照建议使用:results output replace。没有帮助 Emacs版本是24.4.1(在Debian jessie上) 组织模式版本
diff
的输出,但由于某种原因,它不起作用。档案
一,
二,
从命令行调用的diff 1 2
返回
1c1
< a b c
---
> a c b
微型缓冲区读取“代码块未产生输出”。“组织巴别塔错误输出”窗口为空。其他命令,如ls
按预期显示输出。我不熟悉巴别塔
我尝试使用:结果逐字输出,没有任何更改。我还尝试按照建议使用:results output replace
。没有帮助
- Emacs版本是24.4.1(在Debian jessie上)
- 组织模式版本为8.2.10
我可以重现您的问题(在OSX上)
奇怪的是,执行babel块会打开OrgBabel错误输出缓冲区,就好像有什么东西要去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
看起来org babel
不喜欢返回代码不是0
的情况。这就是各种解决方案起作用的原因。添加另一个命令使用表示块的总体错误代码为成功。类似地,管道输送到cat
会使管道返回cat
的错误代码。另一种处理错误条件的方法是:
diff 1 2 || true
@Alex你提交过那个bug吗?如果是这样,我会给它添加一个补丁,如果不是,我会提交我自己的补丁。@AaronMiller我不记得了。我建议你加上你自己的。@Aronmiller:这个问题出了什么事吗?我只是遇到了同样的问题,同样的解决方法也适用。@MeaningfulUsername从未有机会跟进。3年后,错误仍然存在。当diff发现两个文件不同时,它返回一个非零退出代码。OrgBabel似乎认为,如果一个块返回一个非零的退出代码,那么执行就失败了,OrgBabel会窒息。
#+begin_src sh :results output
diff 1 2
echo
#+end_src
#+begin_src sh :results output
diff 1 2 | cat
#+end_src
diff 1 2 || true