2013-07-12 16 views
7

Xin lỗi, tiêu đề có thể hơi khó chịu, nhưng tôi không biết gì tốt hơn. Dù sao, tôi muốn có một kịch bản bash để làm việc trên FreeBSD, OpenBSD và Linux mà không sửa đổi nó, nhưng bash không nằm ở cùng một vị trí trong Linux và BSD.Làm thế nào để có được một kịch bản bash làm việc trên FreeBSD, OpenBSD và Linux mà không sửa đổi nó?

Vì vậy, nếu tôi viết #!/bin/bash thì nó sẽ không hoạt động trên BSD, bởi vì vỏ bash nằm ở /usr/local/bin/bash ở đó. Có giải pháp nào để kịch bản này hoạt động trên cả hai không?

Hoặc tôi có thực sự cần gửi hai tập lệnh với các đường dẫn khác nhau không ...?

+3

Cũng lưu ý rằng trên hệ thống FreeBSD có * không đảm bảo bất kỳ điều gì * mà bash sẽ có sẵn ở tất cả, đó là một cài đặt tùy chọn ... – fvu

Trả lời

12

Sử dụng env trong shebang (#!/usr/bin/env bash) sẽ làm cho hệ điều hành tập lệnh bất khả tri.

1

Tôi thích câu trả lời về việc sử dụng #!/usr/bin/env bash Đây là một câu trả lời thú vị và tuyệt vời, nhưng điều đó sẽ chỉ hoạt động nếu bash nằm trong đường dẫn.

Tùy chọn khác có thể là sử dụng #!/bin/sh là vị trí vỏ tương thích phổ biến nhất. Sau đó, để tập lệnh làm điều gì đó trong sh, chẳng hạn như kiểm tra nơi bash được cài đặt (nếu bash thậm chí được cài đặt). Một tùy chọn khác có thể là có bash tồn tại cho cả hai vị trí. Việc cài đặt khác có thể nghe có vẻ quá mức cần thiết, nhưng mục tiêu này có thể được thực hiện đơn giản bằng cách tạo liên kết cứng để bash thực sự tồn tại ở cả hai vị trí.

Các vấn đề liên quan