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?


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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.