Qual'è la differenza tra sh e shell per org-babel?


12

Sto sperimentando l'approvvigionamento di dati dalla modalità org nei miei script di shell e ho riscontrato una stranezza:

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

Qualche idea di cosa stia succedendo?


1
Sembra che ob-sh sia deprecato a favore di ob-shell (come visto in questo thread della mailing list).
dangom,

Se sono solo alias tra loro, allora perché la differenza di comportamento?
stsquad,

Qualcosa di strano nella tua configurazione. Non vedo alcuna differenza nel comportamento qui. Se echo $ SHELL, ottengo la stessa shell per entrambi. Inoltre, hai provato C-c C-v Ia verificare se entrambi i blocchi src hanno gli stessi header-args?
dangom,

@dangom: hmm stesso set di header args salvo per Lang: shell vs Lang: sh e header-args: shell vs header-args: sh ma entrambi impostati a zero. $ SHELL riporta bash in entrambi i casi.
stsquad,

Risposte:


8

La differenza è quale shell viene chiamata per valutare il tuo blocco. shellchiama qualunque sia la tua shell predefinita mentre shchiama /bin/shspecificamente. La shell predefinita è probabilmente bash, che è un'estensione di sh. echo $0ti dirà quale eseguibile sta eseguendo la tua shell:

#+BEGIN_SRC shell
echo $0
#+END_SRC

#+RESULTS:
: /bin/bash


#+BEGIN_SRC sh
echo $0
#+END_SRC

#+RESULTS:
: sh

Qualsiasi delle shell org-babel-shell-namesinstallate sul tuo sistema funzionerà.


Sono ancora confuso sul perché la variabile di input sia così sporca. Questo bash sta facendo qualcosa di diverso con la variabile?
stsquad,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.