Sự khác biệt giữa sh và shell cho org-babel là gì?


12

Tôi đang thử nghiệm tìm nguồn dữ liệu từ chế độ org vào các tập lệnh shell của mình và tôi đã gặp phải một điều kỳ lạ:

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

Bất cứ ý tưởng những gì đang xảy ra?


1
Có vẻ như ob-sh không được ủng hộ trong ob-shell (Như đã thấy trong chủ đề này của danh sách gửi thư).
dangom

Nếu họ chỉ là bí danh cho nhau thì tại sao lại có sự khác biệt trong hành vi?
stsquad

Một cái gì đó kỳ lạ với cấu hình của bạn. Tôi không thấy bất kỳ sự khác biệt trong hành vi ở đây. Nếu tôi lặp lại $ SHELL, tôi nhận được cùng một vỏ cho cả hai. Ngoài ra, bạn đã thử C-c C-v Ikiểm tra xem cả hai khối src có cùng tiêu đề không?
dangom

@dangom: hmm cùng một bộ tiêu đề args lưu cho Lang: shell vs Lang: sh và header-args: shell vs header-args: sh nhưng cả hai đều được đặt thành nil. $ SHELL báo cáo bash trong cả hai trường hợp.
stsquad

Câu trả lời:


8

Sự khác biệt là trong đó vỏ được gọi để đánh giá khối của bạn. shellgọi bất cứ thứ gì mặc định shell của bạn là trong khi shgọi /bin/shcụ thể. Shell mặc định của bạn có thể là bash, là phần mở rộng của sh. echo $0sẽ cho bạn biết cái gì mà shell của bạn đang chạy:

#+BEGIN_SRC shell
echo $0
#+END_SRC

#+RESULTS:
: /bin/bash


#+BEGIN_SRC sh
echo $0
#+END_SRC

#+RESULTS:
: sh

Bất kỳ shell org-babel-shell-namesnào được cài đặt trên hệ thống của bạn đều hoạt động.


Tôi vẫn bối rối không hiểu tại sao biến đầu vào lại bị mung như vậy. Là bash này làm một cái gì đó khác nhau với các biến?
stsquad
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.