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.