Quelle est la différence entre sh et shell pour org-babel?

12

J'expérimente avec le sourcing de données du mode org dans mes scripts shell et j'ai rencontré une bizarrerie:

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

Une idée de ce qui se passe?

stsquad
la source
1
Il semble que ob-sh soit déconseillé au profit de ob-shell (comme on le voit dans ce fil de la liste de diffusion).
dangom
S'ils ne sont que des alias les uns des autres, pourquoi la différence de comportement?
stsquad
Quelque chose de bizarre avec ta config. Je ne vois aucune différence de comportement ici. Si je fais écho à $ SHELL, j'obtiens le même shell pour les deux. Avez-vous également essayé C-c C-v Ide vérifier si les deux blocs src ont les mêmes arguments d'en-tête?
dangom
@dangom: hmm même ensemble d'arguments d'en-tête sauf pour Lang: shell vs Lang: sh et header-args: shell vs header-args: sh mais les deux sont définis sur nil. $ SHELL signale bash dans les deux cas.
stsquad

Réponses:

8

La différence est quel shell est appelé pour évaluer votre bloc. shellappelle quel que soit votre shell par défaut tout en shappelant /bin/shspécifiquement. Votre shell par défaut est probablement bash, qui est une extension de sh. echo $0vous dira quel exécutable votre shell exécute:

#+BEGIN_SRC shell
echo $0
#+END_SRC

#+RESULTS:
: /bin/bash


#+BEGIN_SRC sh
echo $0
#+END_SRC

#+RESULTS:
: sh

Tous les shells org-babel-shell-namesinstallés sur votre système fonctionneront.

erikstokes
la source
Je suis toujours confus quant à la raison pour laquelle la variable d'entrée est tellement munged. Est-ce que bash fait quelque chose de différent avec la variable?
stsquad