Tại sao sử dụng env trong shebang?


19

Mục đích của #!/usr/bin/env <sh|bash|python>việc sử dụng shebang so với #!/bin/bash, #!/bin/shhoặc là #!/usr/bin/pythongì?


4
Có một câu trả lời tốt ở đây liên quan đến việc sử dụng chung của env.
Kevin Bowen

Câu trả lời:


11

Một số người có thể sử dụng một con trăn khác (perl, v.v.) so với hệ thống. /usr/bin/env pythonsẽ chạy phiên bản được cấu hình như phiên bản hiện tại, có thể làm cho tập lệnh dễ di chuyển hơn.

Mặt khác, theo báo cáo, một số hệ thống không có /usr/bin/env. Ngoài ra, bạn không thể sử dụng #!/usr/bin/env foo xthay thế cho #!foo x, vì foo xsẽ được hiểu là một đối số duy nhất. Vì vậy, giá trị của cách tiếp cận là tranh cãi.


1
Cấu hình ở đâu? Từ info coreutils 'env invocation'tôi có thể thấy hình thức gọi này đảm bảo rằng nó là nhị phân bên ngoài thay vì được tích hợp sẵn, nhưng không có dấu hiệu nào env pythonkhác biệt pythonnhư thế nào?
Tuminoid

4
PATHCó lẽ bạn bao gồm /usr/local/binđầu tiên. Nếu ai đó đã cài đặt thủ công python ở đó, sau đó envsẽ gọi nó, trong khi #!/usr/bin/pythonsẽ bỏ qua nó.
Robie Basak

2
virtualenvlà một công cụ khá phổ biến và nó cài đặt một python thực thi trong thư mục làm việc. Bạn sẽ cần envmẹo để làm cho nó hoạt động chính xác.
Flimm

2
@Tuminoid: bạn đúng: env pythongiống như python. Tuy nhiên, vấn đề là bạn không thể viết một shebang như #!python: bạn cần chỉ định một đường dẫn đầy đủ.
Andrea Corbellini
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.