Apa tujuan menggunakan #!/usr/bin/env <sh|bash|python>
shebang dibandingkan dengan #!/bin/bash
, #!/bin/sh
atau #!/usr/bin/python
?
command-line
bash
environment
Tuminoid
sumber
sumber
Jawaban:
Beberapa orang mungkin menggunakan python berbeda (perl, dll.) Daripada yang satu sistem.
/usr/bin/env python
akan 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 x
sebagai pengganti#!foo x
, karenafoo x
akan ditafsirkan sebagai argumen tunggal. Jadi nilai pendekatannya bisa diperdebatkan.sumber
info coreutils 'env invocation'
saya dapat melihat bentuk panggilan ini memastikan itu adalah biner eksternal, bukan shell built-in, tetapi tidak ada indikasi bagaimanaenv python
bedanyapython
?PATH
mungkin termasuk yang/usr/local/bin
pertama. Jika seseorang telah menginstal python secara manual di sana, makaenv
akan memanggilnya, sedangkan#!/usr/bin/python
akan memotongnya.virtualenv
adalah alat yang cukup populer, dan menginstal python executable di direktori kerja. Anda akan membutuhkanenv
trik untuk membuatnya berfungsi dengan benar.env python
sama denganpython
. Namun masalahnya adalah Anda tidak bisa menulis seperti shebang#!python
: Anda harus menentukan path lengkap.