Có rất nhiều goodreasons để sử dụng #!/usr/bin/env. Tóm lại: Nó làm cho mã của bạn dễ dàng hơn. Vâng, sorta. Check this out ....#!/usr/bin/env và tên quá trình: tính di động ở mức giá?
Tôi có hai kịch bản gần như giống hệt, bintest.py
#! /usr/bin/python
import time
time.sleep(5*60)
và envtest.py
#! /usr/bin/env python
import time
time.sleep(5*60)
Lưu ý rằng chúng chỉ khác nhau ở shebangs của họ.
bintest.py
chạy như mong đợi
[email protected]:~$ ./bintest.py & ps && killall bintest.py [1] 15061 PID TTY TIME CMD 14625 pts/0 00:00:00 bash 15061 pts/0 00:00:00 bintest.py 15062 pts/0 00:00:00 ps [email protected]:~$ [1]+ Terminated ./bintest.py
nhưng envtest.py
làm điều gì đó ít hơn tối ưu
[email protected]:~$ ./envtest.py & ps && killall envtest.py [1] 15066 PID TTY TIME CMD 14625 pts/0 00:00:00 bash 15066 pts/0 00:00:00 python 15067 pts/0 00:00:00 ps envtest.py: no process found [email protected]:~$ killall python [email protected]:~$ [1]+ Terminated ./envtest.py
gì chúng ta đã thấy là sử dụng #! /usr/bin/env
gây ra quá trình này để nhận tên "python" thay vì "envtest.py", do đó hiển thị killall
của chúng tôi không hiệu quả. Ở một mức độ nào đó, có vẻ như chúng ta đã giao dịch một loại tính di động cho một loại khác: bây giờ chúng ta có thể hoán đổi các thông dịch viên trăn một cách dễ dàng, nhưng chúng ta đã mất "khả năng giết" trên dòng lệnh. Có chuyện gì thế? Nếu có một thực hành tốt nhất ở đây để đạt được cả hai, nó là gì?
Ngoài ra còn có một số lý do tốt * không * sử dụng '#/usr/bin/env'!; xem [câu hỏi này] (http://unix.stackexchange.com/q/29608/10454) và [câu trả lời của tôi] (http://unix.stackexchange.com/a/29620/10454). –
@KeithThompson, lý do tôi đặt tiền thưởng vào việc này là vì tôi đang làm việc trên một tập lệnh cần chạy trên cả Linux và Mac OS X, và họ đặt tệp thực thi cần thiết ở các vị trí khác nhau trong $ PATH, nhưng Tôi vẫn muốn '' top'' liệt kê từng chữ "chính xác" để bạn có thể phân biệt một tập lệnh với tập lệnh khác. –
Sẽ không phải là giải pháp để sử dụng kịch bản cài đặt thay thế trình thông dịch cục bộ chính xác trên dòng shebang? – tripleee