Tôi đã thấy ở một số nơi, bao gồm các đề xuất trên trang web này ( Bash shebang ưa thích là gì? ), Để sử dụng #!/usr/bin/env bash
theo sở thích #!/bin/bash
. Tôi thậm chí đã thấy một đề xuất#!/bin/bash
cá nhân táo bạo sử dụng là sai và chức năng bash sẽ bị mất bằng cách làm như vậy.
Tất cả những gì đã nói, tôi sử dụng bash trong một môi trường kiểm tra được kiểm soát chặt chẽ trong đó mọi ổ đĩa đang lưu hành về cơ bản là một bản sao của một ổ đĩa chính. Tôi hiểu đối số tính di động, mặc dù nó không nhất thiết phải áp dụng trong trường hợp của tôi. Có bất kỳ lý do nào khác để thích #!/usr/bin/env bash
hơn các lựa chọn thay thế và, giả sử tính di động là một mối quan tâm, có lý do nào để sử dụng nó có thể phá vỡ chức năng không?
env
có thể không được đặt tại /usr/bin
. Bình luận của Shebang hoàn toàn là một ý tưởng tồi IMHO. Nếu trình thông dịch tập lệnh mặc định của bạn không xử lý các bình luận shebang, thì đó chỉ là một bình luận. Tuy nhiên, nếu bạn biết trình thông dịch tập lệnh có thể xử lý các bình luận shebang và bạn biết đường dẫn đến bash, không có lý do gì để không gọi nó bằng đường dẫn tuyệt đối của nó trừ khi đường dẫn quá dài (không chắc), hoặc bạn có thể chuyển tập lệnh đến một hệ thống không có bash nằm trong / bin. Sau đó, một lần nữa, những cảnh báo mà tôi đã đề cập trước đây áp dụng trong trường hợp đó vì nó liên quan đến tính di động.
/etc
hoặc /bin/sh
. bash
là một tiện ích bổ sung cho hầu hết các hệ thống như Unix. Chỉ có Linux, nơi bash
được đảm bảo có mặt /bin
và rất có thể cũng được liên kết như /bin/sh
. Kể từ khi Linux trở thành Unix thực tế hiện đại cho nhiều người, thực tế là các hệ thống khác ngoài Linux có thể bị lãng quên. Trong câu trả lời của riêng tôi dưới đây, tôi giả sử Linux vì bạn nói bash
. Rất nhiều hộp BSD mà tôi đã làm việc thậm chí không được cài đặt.
/bin/bash
. Bash không được cài đặt theo mặc định. Nếu bạn muốn nó, bạn phải pkg install bash
. Sau khi cài đặt, nó được đặt tại /usr/local/bin/bash
. Không có gì được cài đặt tại /bin/bash
OpenBSD. Một shebang của #!/bin/bash
ý chí sẽ lỗi, và #!/usr/bin/env bash
sẽ thành công.