Захват вывода "diff" с помощью org-babel

Я пытаюсь захватить вывод diff с org-babel, но по какой-то причине это не работает. Для файлов

1

a b c

2

a c b

diff 1 2 вызывается из командной строки возвращает

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

Но с орг-бабел, ничего

#+begin_src sh                                                                                                                                                 
diff 1 2                                                                                                                                                       
#+end_src                                                                                                                                                      

#+RESULTS:

Минибуфер гласит: "Блок кода не выдан". Окно вывода ошибки org-babel пустое. Другие команды, такие как ls показать вывод, как ожидалось. Я не знаком с орг-бабел.

Я пытался с помощью :results output verbatim, без изменений. Я также пытался использовать :results output replace как предложено здесь. Не помогло

  • Версия Emacs - 24.4.1 (в Debian, Джесси)
  • Версия в орг-режиме - 8.2.10

1 ответ

Решение

Я мог бы воспроизвести вашу проблему (на OSX).

Странно то, что выполнение блока babel откроет буфер вывода ошибок Org-babel, как будто что-то идет в STDERR.

Если вы добавите любой другой вывод после diff, результаты будут отображаться ОК. Например,

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

Если вы заставите результаты diff в stdout, результаты также будут отображаться:

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

Выглядит как org-babel не нравится, когда код возврата не 0. Вот почему работают различные решения. Добавление другой команды использования означает, что общий код ошибки блока является успешным. Точно так же вcat заставляет конвейер возвращать код ошибки cat. Еще один способ избавиться от состояния ошибки:

  diff 1 2 || true
Другие вопросы по тегам