ทำไมต้องใช้ env ใน shebang?


19

วัตถุประสงค์ของการใช้คืออะไร#!/usr/bin/env <sh|bash|python>shebang เมื่อเทียบกับ#!/bin/bash, #!/bin/shหรือ#!/usr/bin/python?


4
มีคำตอบที่ดีคือที่นี่ในเรื่องที่เกี่ยวกับการใช้งานทั่วไปของ env
Kevin Bowen

คำตอบ:


11

บางคนอาจใช้ไพ ธ อนที่แตกต่างจากระบบ /usr/bin/env pythonจะเรียกใช้เวอร์ชันที่กำหนดค่าเป็นเวอร์ชันปัจจุบันซึ่งอาจทำให้สคริปต์พกพาได้

บนมืออื่น ๆ /usr/bin/envมีรายงานว่าบางระบบไม่ได้ นอกจากนี้คุณไม่สามารถใช้#!/usr/bin/env foo xแทน#!foo xเนื่องจากfoo xจะถูกตีความว่าเป็นอาร์กิวเมนต์เดียว ดังนั้นคุณค่าของวิธีการจึงเป็นที่ถกเถียงกัน


1
กำหนดค่าที่ไหน จากinfo coreutils 'env invocation'ฉันเห็นรูปแบบการโทรนี้ทำให้แน่ใจว่ามันเป็นไบนารี่ภายนอกแทนเชลล์ในตัว แต่ไม่มีข้อบ่งชี้ว่าenv pythonจะแตกต่างกันpythonอย่างไร
Tuminoid

4
คุณPATHอาจรวมถึง/usr/local/binก่อน หากมีใครติดตั้งไพ ธ อนด้วยตนเองอยู่นั้นenvจะเรียกมัน#!/usr/bin/pythonว่า
Robie Basak

2
virtualenvเป็นเครื่องมือที่ได้รับความนิยมมากและติดตั้งไฟล์ไพ ธ อนได้ในไดเรกทอรีทำงาน คุณจะต้องใช้envเคล็ดลับเพื่อให้มันทำงานได้อย่างถูกต้อง
Flimm

2
@Tuminoid: คุณมีสิทธิ: เป็นเช่นเดียวกับenv python pythonอย่างไรก็ตามปัญหาคือคุณไม่สามารถเขียน shebang เช่น#!python: คุณต้องระบุเส้นทางแบบเต็ม
Andrea Corbellini
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.