Khi nào nên sử dụng #! / Bin / bash thay vì #! / Bin / sh trong Shell Script?
Khi bạn đang tạo một tập lệnh shell mới, bạn muốn chắc chắn rằng nó không có vấn đề gì nhất có thể, nhưng đôi khi có thể hơi khó hiểu khi biết shebang nào là tốt nhất để bạn sử dụng. Trên lưu ý đó, bài hỏi và trả lời của SuperUser ngày hôm nay có câu trả lời cho câu hỏi của người đọc bối rối.
Phiên hỏi và trả lời hôm nay đến với chúng tôi nhờ sự hỗ trợ của SuperUser - một phân ngành của Stack Exchange, một nhóm các trang web Hỏi & Đáp do cộng đồng điều khiển.
Câu hỏi
Độc giả siêu người dùng Hendre muốn biết khi nào nên sử dụng nó tốt hơn #! / bin / bash thay vì #! / thùng / sh trong các kịch bản shell:
Khi nào thì thích hợp hơn để sử dụng #! / bin / bash hơn là #! / thùng / sh trong một kịch bản shell?
Khi nào thì tốt hơn để sử dụng #! / bin / bash thay vì #! / thùng / sh trong một kịch bản shell?
Câu trả lời
Grawity cộng tác viên SuperUser có câu trả lời cho chúng tôi:
Nói ngắn gọn:
- Có một số shell thực hiện một superset của đặc tả sh POSIX. Trên các hệ thống khác nhau, / thùng / sh có thể là một liên kết đến tro, bash, dash, ksh, zsh, v.v ... Nó sẽ luôn luôn tương thích với sh, không bao giờ csh hoặc cá.
- Miễn là bạn chỉ sử dụng các tính năng của sh, bạn có thể (và thậm chí có thể nên) sử dụng #! / thùng / sh và kịch bản sẽ hoạt động tốt, bất kể nó là shell nào.
- Nếu bạn bắt đầu sử dụng các tính năng dành riêng cho bash (tức là mảng), bạn nên yêu cầu bash cụ thể bởi vì, ngay cả khi / thùng / sh đã gọi bash trên hệ thống của bạn, nó có thể không có trên hệ thống của người khác và tập lệnh của bạn sẽ không chạy ở đó. Điều tương tự cũng áp dụng cho zsh và ksh, tất nhiên.
- Ngay cả khi tập lệnh chỉ dành cho sử dụng cá nhân, bạn có thể nhận thấy rằng một số hệ điều hành thay đổi / thùng / sh trong quá trình nâng cấp. Ví dụ, trên Debian nó từng là bash, nhưng sau đó được thay thế bằng dấu gạch ngang rất nhỏ. Các tập lệnh sử dụng bashism nhưng có #! / thùng / sh đột nhiên vỡ.
Tuy nhiên:
- Cũng #! / bin / bash điều đó không đúng Trên các hệ thống khác nhau, bash có thể sống trong / usr / thùng, / usr / pkg / thùng, hoặc là / usr / địa phương / bin.
- Một lựa chọn đáng tin cậy hơn là #! / usr / bin / env bash, cái nào dùng $ PATH. Mặc dù bản thân công cụ env cũng không được đảm bảo nghiêm ngặt, / usr / bin / env vẫn hoạt động trên nhiều hệ thống hơn / thùng / bash làm.
Có một cái gì đó để thêm vào lời giải thích? Tắt âm thanh trong các ý kiến. Bạn muốn đọc thêm câu trả lời từ những người dùng Stack Exchange am hiểu công nghệ khác? Kiểm tra chủ đề thảo luận đầy đủ ở đây.
Tín dụng hình ảnh: Wikipedia