Mengapa menggunakan env di shebang?


19

Apa tujuan menggunakan #!/usr/bin/env <sh|bash|python>shebang dibandingkan dengan #!/bin/bash, #!/bin/shatau #!/usr/bin/python?


4
Ada jawaban yang bagus di sini sehubungan dengan penggunaan env secara umum.
Kevin Bowen

Jawaban:


11

Beberapa orang mungkin menggunakan python berbeda (perl, dll.) Daripada yang satu sistem. /usr/bin/env pythonakan menjalankan versi yang dikonfigurasikan sebagai versi saat ini, mungkin membuat skrip lebih portabel.

Di sisi lain, kabarnya, beberapa sistem tidak memiliki /usr/bin/env. Juga, Anda tidak dapat menggunakan #!/usr/bin/env foo xsebagai pengganti #!foo x, karena foo xakan ditafsirkan sebagai argumen tunggal. Jadi nilai pendekatannya bisa diperdebatkan.


1
Dikonfigurasi dimana? Dari info coreutils 'env invocation'saya dapat melihat bentuk panggilan ini memastikan itu adalah biner eksternal, bukan shell built-in, tetapi tidak ada indikasi bagaimana env pythonbedanya python?
Tuminoid

4
Anda PATHmungkin termasuk yang /usr/local/binpertama. Jika seseorang telah menginstal python secara manual di sana, maka envakan memanggilnya, sedangkan #!/usr/bin/pythonakan memotongnya.
Robie Basak

2
virtualenvadalah alat yang cukup populer, dan menginstal python executable di direktori kerja. Anda akan membutuhkan envtrik untuk membuatnya berfungsi dengan benar.
Flimm

2
@ Tuminoid: Anda benar: env pythonsama dengan python. Namun masalahnya adalah Anda tidak bisa menulis seperti shebang #!python: Anda harus menentukan path lengkap.
Andrea Corbellini
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.