Was ist der Unterschied zwischen sh und shell für org-babel?

12

Ich experimentiere mit der Beschaffung von Daten aus dem Organisationsmodus in meine Shell-Skripte und bin auf eine Verrücktheit gestoßen:

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

Irgendeine Idee, was los ist?

stsquad
quelle
1
Es scheint, als ob ob-sh zugunsten von ob-shell veraltet ist (wie in diesem Thread der Mailingliste zu sehen).
Dangom
Wenn sie nur Aliase zueinander sind, warum dann der Unterschied im Verhalten?
stsquad
Etwas seltsames mit deiner Konfiguration. Ich sehe hier keinen Unterschied im Verhalten. Wenn ich $ SHELL wiedergebe, bekomme ich für beide die gleiche Shell. C-c C-v IHaben Sie auch versucht zu überprüfen, ob beide src-Blöcke die gleichen Header-Argumente haben?
Dangom
@dangom: hmm gleiche Menge von Header-Argumenten außer für Lang: Shell gegen Lang: sh und Header-Argumente: Shell gegen Header-Argumente: sh, aber beide auf Null gesetzt. $ SHELL meldet in beiden Fällen Bash.
stsquad

Antworten:

8

Der Unterschied besteht darin, welche Shell aufgerufen wird, um Ihren Block auszuwerten. shellAnrufe , was auch immer Ihre Standard - Shell während ist shAnrufe /bin/shspeziell. Ihre Standard-Shell ist wahrscheinlich bash, eine Erweiterung von sh. echo $0wird Ihnen sagen, welche ausführbare Datei Ihre Shell ausführt:

#+BEGIN_SRC shell
echo $0
#+END_SRC

#+RESULTS:
: /bin/bash


#+BEGIN_SRC sh
echo $0
#+END_SRC

#+RESULTS:
: sh

Alle org-babel-shell-namesauf Ihrem System installierten Shells funktionieren.

erikstokes
quelle
Ich bin immer noch verwirrt darüber, warum die Eingabevariable so munged wird. Macht diese Bash etwas anderes mit der Variablen?
stsquad