Яка різниця між sh і shell для org-babel?


12

Я експериментую з пошуку даних з org-режиму в мої сценарії оболонки, і я натрапив на дивацтво:

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

Будь-яка ідея, що відбувається?


1
Здається, що ob-sh застаряє на користь ob-shell (Як видно з цієї теми списку розсилки).
дангом

Якщо вони лише псевдоніми один одному, то чому різниця в поведінці?
stsquad

Щось дивне у вашому конфігурації. Я не бачу тут різниці в поведінці. Якщо я повторюю $ SHELL, я отримую однакову оболонку для обох. Крім того, ви намагалися C-c C-v Iперевірити, чи обидва src-блоки мають однакові аргументи заголовка?
дангом

@dangom: hmm той самий набір аргументів заголовка зберегти для Lang: shell vs Lang: sh та header-args: shell vs header-args: sh, але обидва встановлені на нуль. $ SHELL повідомляє баш в обох випадках.
stsquad

Відповіді:


8

Різниця полягає в тому, яка оболонка викликається для оцінки вашого блоку. shellдзвінки незалежно від вашої оболонки за замовчуванням, в той час як shвиклики /bin/shспеціально. Ваша оболонка за замовчуванням, ймовірно, bash, яка є розширенням sh. echo $0підкаже, який виконується ваша оболонка:

#+BEGIN_SRC shell
echo $0
#+END_SRC

#+RESULTS:
: /bin/bash


#+BEGIN_SRC sh
echo $0
#+END_SRC

#+RESULTS:
: sh

Будь-яка з оболонок org-babel-shell-names, встановлених у вашій системі, запрацює.


Я все ще плутаюсь, чому вхідна змінна настільки змінена. Це баш робить щось інше зі змінною?
stsquad
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.