Jaka jest różnica między sh i shell dla org-babel?

12

Eksperymentuję z pozyskiwaniem danych z trybu org do moich skryptów powłoki i natknąłem się na dziwność:

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

Masz pomysł, co się dzieje?

stsquad
źródło
1
Wygląda na to, że ob-sh jest przestarzałe na rzecz ob-shell (jak widać w tym wątku listy adresowej).
dangom
Jeśli są tylko pseudonimami, to po co różnica w zachowaniu?
stsquad
Coś dziwnego w twojej konfiguracji. Nie widzę tu żadnej różnicy w zachowaniu. Jeśli powtórzę echo $ SHELL, otrzymam tę samą powłokę dla obu. Czy próbowałeś C-c C-v Irównież sprawdzić, czy oba bloki src mają takie same argumenty nagłówka?
dangom
@dangom: hmm ten sam zestaw argumentów nagłówka oprócz Lang: shell vs Lang: sh i header-args: shell vs header-args: sh, ale oba ustawione na zero. $ SHELL zgłasza bash w obu przypadkach.
stsquad

Odpowiedzi:

8

Różnica polega na tym, która powłoka zostaje wywołana w celu oceny bloku. shellwywołuje jakąkolwiek domyślną powłokę, a konkretnie shpołączenia /bin/sh. Domyślną powłoką jest prawdopodobnie bash, który jest rozszerzeniem sh. echo $0powie ci, jaki plik wykonywalny działa twoja powłoka:

#+BEGIN_SRC shell
echo $0
#+END_SRC

#+RESULTS:
: /bin/bash


#+BEGIN_SRC sh
echo $0
#+END_SRC

#+RESULTS:
: sh

Każda z powłok org-babel-shell-nameszainstalowanych w systemie będzie działać.

erikstokes
źródło
Nadal jestem zdezorientowany, dlaczego zmienna wejściowa jest tak mungowana. Czy ten bash robi coś innego ze zmienną?
stsquad