【问题标题】:How can I load bash (as opposed to sh) in org babel to enable #+BEGIN_SRC bash?如何在 org babel 中加载 bash(而不是 sh)以启用 #+BEGIN_SRC bash?
【发布时间】:2015-03-20 09:21:17
【问题描述】:

我看到了对

的引用和使用示例
#+BEGIN_SRC bash

但是在我的org模式版本(elpa,org 20150316)customize-variable org-babel-load-languages的菜单中,没有“bash”项,只有shell。尝试评估诸如

之类的代码
#+BEGIN_SRC bash
ls -l
#+END_SRC

我明白了

org-babel-execute-src-block:bash 没有 org-babel-execute 函数!

我错过了什么?

谢谢。

【问题讨论】:

  • 只是一个想法,但你能试试#+begin_src sh :shebang "#!/bin/bash"吗?
  • 这适用于我给出的示例,因此如果您将评论作为答案,我应该接受它。虽然我最初的目的是使用一些处理关联数组discussed here 的能力,而 `:shebang' 解决方案没有提供这些能力。我认为所有这些都指向 ob-sh.el ,它是 melpa 上 org 的一部分,没有我期望的一些补丁。
  • 问题是 melpa 和 elpa 都有旧版本的 ob-sh.el,它没有 bash 更改。 [org git](git://orgmode.org/org-mode.git) 上的版本确实有一个启用了 bash 的 ob-shell.el 版本。在我的 init.el 中要求/加载此版本,例如 (load-file "~/org-git/org-mode/lisp/ob-shell.el") 允许 #+BEGIN_SRC bash 并且还允许 org babel 处理关联数组。
  • 是的,ob-shell.el 是关键。

标签: bash org-mode org-babel


【解决方案1】:

对我来说,我做到了

(require 'package)
(add-to-list 'package-archives '("org" . "http://orgmode.org/elpa/") t)

http://orgmode.org/elpa.html 所示,以确保我拥有最新的 Org 版本(vanilla Emacs 附带其自己的 Org 版本)。然后我在完成M-x list-packages 之后以交互方式安装了org 包。那我就可以了

(org-babel-do-load-languages 'org-babel-load-languages
    '(
        (shell . t)
    )
)

允许#+BEGIN_SRC bash

【讨论】:

  • 如果不是很明显,可以将 org-babel-do-load-languages 代码 sn-p 添加到您的 .emacs 文件中。
【解决方案2】:

查看org-babel-sh-command的值(默认为“sh”),只使用“sh”作为语言。

【讨论】:

  • 我已经在我的 init.el 中设置为bash。我认为问题在于 melpa 上 org 的一部分 ob-sh.el(我使用的是 melpa,而不是我所说的 elpa)没有提到 bash。也许这意味着它没有一些补丁,我需要进一步研究它,也许会得到一个更高的版本......
  • 经过检查,上面的 var 似乎从 Git Org 中消失了。它似乎已被org-babel-shell-names 取代。也许将“bash”作为它的第一个组成部分? ...如果它确实存在于您的 Org 版本中?
  • 你使用的是什么版本的 org-babel?问题是即使 Melpa 或 Elpa 上的最新版本甚至没有 org-babel-shell-names 或任何其他 bash 处理。不确定是许可还是遗漏。我现在使用来自 org Git repo 的 ob-shell.el 而不是 Elpa/Melpa 上提供的 ob-sh.el ,它提供了我需要的一切。为什么 Elpa/Melpa 发布旧版本仍然很有趣。
  • 我正在使用 Org-mode 版本 8.3beta (release_8.3beta-902-gac1298​​ @ /path/to/orgmode.git)!??
  • 参见comments.gmane.org/gmane.emacs.orgmode/83356,尤其是 Eric Sc​​hulte(Babel 的主要作者)的评论。不过,我不确定我是否完全理解它。
【解决方案3】:

似乎bashshell 标识符所覆盖。

因此,您必须在customize-variable org-babel-load-languages 中激活插入“Shell Script”。

测试版本:来自 MELPA 的 20150810。

【讨论】:

    【解决方案4】:

    如果你使用的是直接/使用包试试这个:-

    (use-package ob-shell
      :straight nil
      :after org
      :config
      (setq org-babel-default-header-args:sh '((:results . "output")))
      (setq org-babel-default-header-args:shell '((:results . "output"))))
    

    【讨论】:

      猜你喜欢
      • 2011-10-16
      • 2021-01-24
      • 2011-03-23
      • 1970-01-01
      • 2015-05-15
      • 2014-09-16
      • 2019-06-14
      • 2020-11-18
      • 2023-02-07
      相关资源
      最近更新 更多