sh和org-babel的shell有什么区别?


12

我正在尝试将来自组织模式的数据采购到我的Shell脚本中,但遇到了一个怪异现象:

#+tblname: simple-table
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |

#+name: work-with-simple-list-shell
#+begin_src shell :var tbl=simple-table
echo "$tbl"
#+end_src

#+RESULTS: work-with-simple-list-shell
: 1

#+name: work-with-simple-list-sh
#+begin_src sh :var tbl=simple-table
echo "$tbl"
#+end_src

#+RESULTS: work-with-simple-list-sh
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |

知道发生了什么吗?


1
似乎不赞成使用ob-sh,而推荐使用ob-shell(如邮件列表的该线程所示)。
dangom

如果它们只是彼此的别名,那为什么会有不同的行为呢?
stsquad

您的配置有些奇怪。我在这里的行为没有任何区别。如果我回显$ SHELL,则两者的外壳都相同。另外,您是否尝试C-c C-v I检查两个src块是否具有相同的标头参数?
dangom

@dangom:相同的一组头参数保存为Lang:shell vs Lang:sh和header-args:shell vs header-args:sh,但都设置为nil。$ SHELL在两种情况下都报告bash。
stsquad

Answers:


8

区别在于调用哪个 shell来评估您的块。 专门shellsh调用时调用默认外壳的任何内容/bin/sh。您的默认外壳可能是bash,它是sh的扩展。 echo $0会告诉您您的Shell正在运行哪个可执行文件:

#+BEGIN_SRC shell
echo $0
#+END_SRC

#+RESULTS:
: /bin/bash


#+BEGIN_SRC sh
echo $0
#+END_SRC

#+RESULTS:
: sh

org-babel-shell-names系统上安装的任何外壳程序都可以使用。


关于输入变量为何如此蒙昧,我仍然感到困惑。这个bash会对变量做些不同的事情吗?
stsquad
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.