tương thích dash với bash


7

Wikipedia nói rằng dashthực thi nhanh hơn bash. Câu hỏi của tôi là, nếu tôi đặt /bin/shthành dash, liệu tất cả các tập lệnh sử dụng /bin/shtrong dòng shebang của chúng được dành cho bashcông việc theo dash?


8
nếu họ không làm việc, bạn nên la mắng tác giả và nói với anh ta rằng #! dòng nên #!/bin/bashvà các tập lệnh của anh ấy không tuân thủ theo kiểu posix và do đó cần được chỉ định để chạy với trình thông dịch thích hợp
xenoterracide

Câu trả lời:


12

Không, không phải tất cả các tập lệnh dành cho bash đều hoạt động với dấu gạch ngang. Một số 'bashism' sẽ không hoạt động trong dấu gạch ngang, chẳng hạn như kiểu C cho các vòng lặp và toán tử so sánh khung kép. Nếu bạn có một tập các bash script mà bạn muốn sử dụng cho dấu gạch ngang, bạn có thể cân nhắc sử dụng checkbashism . Công cụ này sẽ kiểm tra tập lệnh của bạn để biết các tính năng chỉ bash không có khả năng hoạt động trong dấu gạch ngang.


Ôi. Tiện ích tiện dụng
Michael Mrozek

2
nhưng các tập lệnh có / bin / sh trong shebang không dành cho bash, bây giờ chúng có phải không?

2
@hop: Họ có thể không có ý định bash nhưng họ vẫn có thể chỉ được thử nghiệm trên bash.
Maciej Piechotka

2
@MaciejPiechotka Bất kỳ tập lệnh nào sử dụng dòng shebang #!/bin/shnhưng không hoạt động /bin/sh(ví dụ: vì nó được viết cho và chỉ chạy trong bash) nên được coi là bị hỏng . Cách đơn giản nhất để sửa các tập lệnh như vậy là thay thế shebang bằng #!/bin/bash(hoặc #!/usr/bin/env bash).
jw013

1
@MaciejPiechotka Bạn nhớ quan điểm của tôi. Tôi đã không đề nghị mọi người nên đi và bây giờ và sửa tất cả các lỗi trong tập lệnh trên hệ thống của họ. Không ai có thời gian cho việc đó và nếu họ đã làm việc, có rất nhiều việc khẩn cấp phải làm. Tôi chỉ chỉ ra một thực tế không thể phủ nhận rằng nếu bạn viết một kịch bản phụ thuộc vào bashcác tính năng -only, bạn nên khai báo nó như vậy và không phải như vậy sh. Mặt khác, nó chỉ đơn giản là không hoạt động trên bất kỳ hệ thống nào không được shliên kết đến bash. Điều thực tế cần làm là viết và shebang các tập lệnh của bạn một cách chính xác để chúng thực sự hoạt động .
jw013

-1

Thậm chí các kịch bản sh không tương thích với dấu gạch ngang. Bootstrap của Pkgsrc, ví dụ.


1
Hấp dẫn. Tôi có ấn tượng rằng các phiên bản gần đây của dấu gạch ngang tuân thủ POSIX. Kiểm tra nhanh bằng cách sử dụng dash -nđã không đưa ra bất kỳ lỗi nào khi chạy với bootstrap, nhưng đó là thử nghiệm ngây thơ nhất.
Steven D

@Steven IIRC có một biến dashkhông hỗ trợ. Có thể nhiều thứ hơn, nhưng danh sách là rất nhỏ.
xenoterracide

dash là một cổng của NetBSD sang Debian, vì vậy có vẻ như nó không hoạt động đối với một thứ được thiết kế để hoạt động với sh của NetBSD. Trớ trêu thay, tập lệnh đó không phải là tuân thủ POSIX mà là tuân thủ Debian vì nó sử dụnglocal
Stéphane Chazelas
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.