Khi bạn đang tạo một tập lệnh shell mới, bạn muốn đảm bảo nó không gặp sự cố nhất có thể, nhưng đôi khi có thể hơi bối rối khi biết shebang nào là tốt nhất để bạn sử dụng. Trên lưu ý đó, bài đăng Hỏi và Đáp của SuperUser hôm nay có câu trả lời cho câu hỏi của một độc giả đang bối rối.
Phiên Hỏi & Đáp hôm nay đến với chúng tôi với sự hỗ trợ của SuperUser — một phần của Stack Exchange, một nhóm các trang web Hỏi & Đáp do cộng đồng điều hành.
Câu hỏi
Người đọc SuperUser Hendre muốn biết khi nào thì tốt hơn để sử dụng #! / bin / bash thay vì #! / bin / sh trong tập lệnh shell:
Khi nào thì thích hợp hơn để sử dụng #! / bin / bash hơn là #! / bin / sh trong một kịch bản shell?
Khi nào thì tốt hơn để sử dụng #! / bin / bash thay vì #! / bin / sh trong một kịch bản shell?
Câu trả lời
Người đóng góp của SuperUser grawity có câu trả lời cho chúng tôi:
Nói ngắn gọn:
- Có một số trình bao triển khai một tập trên của đặc tả POSIX sh. Trên các hệ thống khác nhau, / bin / sh có thể là một liên kết tới ash, bash, dash, ksh, zsh, v.v. Tuy nhiên, nó sẽ luôn tương thích với sh, không bao giờ là csh hoặc fish.
- 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 #! / bin / sh và script 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ể vì, ngay cả khi / bin / sh đã gọi dựa 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 ở đó. Tất nhiên, điều tương tự cũng áp dụng cho zsh và ksh.
- Ngay cả khi tập lệnh chỉ dành cho mục đích 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 / bin / sh trong quá trình nâng cấp. Ví dụ, trên Debian, nó từng là dấu gạch ngang, nhưng sau đó được thay thế bằng dấu gạch ngang rất nhỏ. Tập lệnh đã sử dụng bản quyền nhưng có #! / bin / sh đột ngột bị vỡ.
Tuy nhiên:
- Cũng #! / bin / bash điều đó không chính xác. Trên các hệ thống khác nhau, bash có thể sống ở / usr / bin, / usr / pkg / thùng, hoặc là / usr / local / bin.
- Một lựa chọn đáng tin cậy hơn là #! / usr / bin / env bash, sử 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 / bin / bash làm.
Có điều 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 toàn bộ chủ đề thảo luận ở đây.
Tín dụng hình ảnh: Wikipedia