Emacs 捕获“的输出”;“差别”;用巴别塔

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上) 组织模式版本

我试图用OrgBabel捕获
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