В чем разница между sh и shell для org-babel?

12

Я экспериментирую с поиском данных из org-mode в своих скриптах оболочки и наткнулся на странность:

#+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 |

Есть идеи, что происходит?

stsquad
источник
1
Похоже , акушер-ш осуждаются в пользу акушер-оболочке (как видно в этой теме списка рассылки).
Дангом
Если они только псевдонимы друг другу, то почему разница в поведении?
Stsquad
Что-то странное с вашим конфигом. Я не вижу никакой разницы в поведении здесь. Если я повторяю $ SHELL, я получаю одинаковую оболочку для обоих. Кроме того, вы пытались C-c C-v Iпроверить, имеют ли оба блока src одинаковые заголовочные аргументы?
dangom
@dangom: хмм, тот же набор аргументов заголовка, кроме Lang: shell против Lang: sh и header-args: shell против header-args: sh, но оба равны nil. $ SHELL сообщает bash в обоих случаях.
Stsquad

Ответы:

8

Разница в том, какая оболочка вызывается для оценки вашего блока. shellвызывает то, что ваша оболочка по умолчанию в то время как shзвонки /bin/shспециально. Ваша оболочка по умолчанию, вероятно, bash, которая является расширением sh. echo $0скажет вам, какой исполняемый файл работает в вашей оболочке:

#+BEGIN_SRC shell
echo $0
#+END_SRC

#+RESULTS:
: /bin/bash


#+BEGIN_SRC sh
echo $0
#+END_SRC

#+RESULTS:
: sh

Любая оболочка org-babel-shell-names, установленная в вашей системе, будет работать.

erikstokes
источник
Я до сих пор не могу понять, почему входная переменная так напичкана. Этот bash делает что-то другое с переменной?
Stsquad