Tập lệnh dash, ash và sh có tương thích 100% không?


16

Tôi muốn biết liệu các tập lệnh được viết cho dash, ash và sh có tương thích 100% không?

Có bất kỳ tính năng được thêm vào dấu gạch ngang hoặc tro, hoặc thay đổi cú pháp?

Từ những gì tôi nghe được, tro là hậu duệ trực tiếp của sh.


Tro là một dạng bash sọc xuống
Joe

4
Nguồn? Tôi không thấy gì nói rằng tro có liên quan đến bash
user1115057

Tại sao mọi người sẽ không gửi các bản vá cho bash thay vì tạo ra tất cả các loại vỏ, nó luôn luôn đệm tôi. Nếu bạn thực sự muốn biết, đọc hướng dẫn, ví dụ nhưman ash
daisy

2
Đúng, nó không phải là hậu duệ từ bash. Sẽ chính xác hơn khi nói họ là hậu duệ của sh (vỏ Bourne ban đầu), nhưng điều đó cũng không hoàn toàn chính xác.
Zlatko

Bạn có thể sử dụng tiện ích checkbashismsđể kiểm tra xem tập lệnh của bạn có tuân thủ POSIX không.
donothings thành công

Câu trả lời:


18

Câu trả lời ngắn gọn là không, chúng không tương thích 100%.

Nhưng hầu hết các shell đều khá gần với cơ bản, vì vậy bạn sẽ hiếm khi gặp phải sự không nhất quán. Trong thực tế, hầu hết các shell khác nhau không nhiều bởi cú pháp được thêm vào, nhưng bởi một số tính năng bổ sung như hoàn thành tab và tương tự.

Ngoài ra, chính xác dashlà một hậu duệ của ash- hoặc cổng từ BSD sang Linux, chính xác. Và tất cả trong số họ nên là con cháu hoặc thực hiện khác nhau sh. Trong thực tế, shlà trên hầu hết các hệ thống chỉ là một liên kết tượng trưng đến bash, dashhay cái gì khác. Vấn đề là tuân thủ POSIX - và khi bạn viết tập lệnh theo tiêu chuẩn, bạn sẽ không gặp vấn đề.

Sự khác biệt giữa các shell đó là ở tối ưu hóa và hiệu suất. Chúng ít giàu tính năng hơn bash, nhưng chúng là những vỏ hoàn toàn hợp pháp. Bash là giàu tính năng cho công việc tương tác, nhưng sử dụng nhiều bộ nhớ hơn, ví dụ.


Nhưng đối với việc sử dụng tập lệnh, chúng có tương thích?
dùng1115057

Và về việc tuân thủ POSIX, ngay cả khi tôi tuân theo tiêu chuẩn đó, nếu một tập lệnh được viết cho Bash, tôi không nghĩ nó sẽ chạy trên bất kỳ sh hoặc hậu duệ nào của nó
user1115057

Chúng phải tương thích với nhau nếu bạn không sử dụng một số tính năng tối nghĩa. Nhưng nếu bạn sử dụng tập lệnh bash, bạn có thể gặp nhiều rắc rối hơn.
Zlatko

không bao giờ có ý định sử dụng bash với sh hoặc tro hoặc dash. Những tính năng tối nghĩa là gì?
dùng1115057

1
nhiều tính năng mới hơn của bash là các bổ sung trên POSIX, do đó, ngày càng có nhiều khả năng bạn sẽ viết mã không thể truy cập được nếu bạn đang sử dụng chúng. IIRC thậm chí cấu trúc [[]] không có trong sh. Ngoài ra, hãy cẩn thận, nếu bạn không viết tập lệnh shell thuần túy, sự khác biệt về công cụ cũng sẽ xuất hiện (các phiên bản khác nhau của sed, grep, awk ...).
lynxlynxlynx

1

Cần phải đề cập rằng trên một số hệ thống, đáng chú ý là Debian, / bin / ash không khả dụng:

$ type ash dash
bash: type: ash: not found
dash is /bin/dash

2
Họ có thể có tro hộp.
muru
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.