¿Cuál es la diferencia entre sh y shell para org-babel?

12

Estoy experimentando con la obtención de datos del modo org en mis scripts de shell y me he encontrado con una rareza:

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

¿Alguna idea de lo que está pasando?

stsquad
fuente
1
Parece que ob-sh está en desuso a favor de ob-shell (como se ve en este hilo de la lista de correo).
dangom
Si solo son alias entre sí, ¿por qué la diferencia de comportamiento?
stsquad
Algo raro con tu configuración. No veo ninguna diferencia en el comportamiento aquí. Si hago eco de $ SHELL, obtengo el mismo shell para ambos. Además, ¿trató C-c C-v Ide verificar si ambos bloques src tienen los mismos argumentos de encabezado?
dangom
@dangom: hmm el mismo conjunto de argumentos de encabezado salvo para Lang: shell vs Lang: sh y header-args: shell vs header-args: sh pero ambos configurados en nulo. $ SHELL informa bash en ambos casos.
stsquad

Respuestas:

8

La diferencia es qué shell se llama para evaluar su bloque. shellllama cualquiera que sea su shell predeterminado mientras que shllama /bin/shespecíficamente. Su shell predeterminado es probablemente bash, que es una extensión de sh. echo $0le dirá qué ejecutable está ejecutando su shell:

#+BEGIN_SRC shell
echo $0
#+END_SRC

#+RESULTS:
: /bin/bash


#+BEGIN_SRC sh
echo $0
#+END_SRC

#+RESULTS:
: sh

Cualquiera de los shells org-babel-shell-namesinstalados en su sistema funcionará.

erikstokes
fuente
Todavía estoy confundido sobre por qué la variable de entrada se vuelve tan modificada. ¿Esta bash está haciendo algo diferente con la variable?
stsquad