Belum tentu lebih baik.
Keuntungannya #!/usr/bin/env python
adalah bahwa ia akan menggunakan apa pun yang python
dapat dieksekusi muncul pertama kali di pengguna $PATH
.
The Kerugian dari #!/usr/bin/env python
adalah bahwa ia akan menggunakan apa pun yang python
dieksekusi muncul pertama kali di pengguna $PATH
.
Itu berarti bahwa skrip dapat berperilaku berbeda tergantung pada siapa yang menjalankannya. Untuk satu pengguna, mungkin menggunakan /usr/bin/python
yang diinstal dengan OS. Untuk yang lain, mungkin menggunakan eksperimen /home/phred/bin/python
yang tidak berfungsi dengan benar.
Dan jika python
hanya dipasang di /usr/local/bin
, pengguna yang tidak memiliki /usr/local/bin
di $PATH
bahkan tidak akan dapat menjalankan script. (Itu mungkin tidak terlalu mungkin pada sistem modern, tetapi itu bisa dengan mudah terjadi untuk penerjemah yang lebih tidak jelas.)
Dengan menentukan #!/usr/bin/python
Anda menentukan penerjemah mana yang akan digunakan untuk menjalankan skrip pada sistem tertentu .
Masalah potensial lainnya adalah bahwa #!/usr/bin/env
triknya tidak memungkinkan Anda meneruskan argumen ke intrepreter (selain nama skrip, yang diteruskan secara implisit). Ini biasanya bukan masalah, tetapi bisa saja. Banyak skrip Perl yang ditulis #!/usr/bin/perl -w
, tetapi use warnings;
merupakan pengganti yang disarankan akhir-akhir ini. Skrip Csh harus digunakan #!/bin/csh -f
- tetapi skrip csh tidak disarankan sejak awal. Tapi mungkin ada contoh lain.
Saya memiliki sejumlah skrip Perl dalam sistem kontrol sumber pribadi yang saya instal ketika saya membuat akun pada sistem baru. Saya menggunakan skrip penginstal yang mengubah #!
baris setiap skrip saat menginstalnya di saya $HOME/bin
. (Saya tidak harus menggunakan apa pun selain #!/usr/bin/perl
akhir - akhir ini; ini kembali ke masa ketika Perl sering tidak diinstal secara default.)
Poin minor: #!/usr/bin/env
trik ini bisa dibilang merupakan penyalahgunaan env
perintah, yang semula dimaksudkan (sesuai namanya) untuk memohon perintah dengan lingkungan yang diubah. Selain itu, beberapa sistem yang lebih lama (termasuk SunOS 4, jika saya ingat dengan benar) tidak memiliki env
perintah /usr/bin
. Tak satu pun dari ini cenderung menjadi perhatian yang signifikan. env
tidak bekerja dengan cara ini, banyak skrip yang menggunakan #!/usr/bin/env
trik, dan penyedia OS tidak akan melakukan apa pun untuk memecahkannya. Ini mungkin menjadi masalah jika Anda ingin naskah Anda untuk berjalan pada sistem benar-benar tua, tapi kemudian Anda mungkin perlu mengubah pula.
Masalah lain yang mungkin, (terima kasih kepada Sopalajo de Arrierez untuk menunjukkannya dalam komentar) adalah bahwa pekerjaan cron dijalankan dengan lingkungan terbatas. Secara khusus, $PATH
biasanya sesuatu seperti /usr/bin:/bin
. Jadi jika direktori yang berisi penerjemah tidak kebetulan berada di salah satu direktori itu, bahkan jika itu di default Anda $PATH
di shell pengguna, maka /usr/bin/env
triknya tidak akan berhasil. Anda dapat menentukan jalur yang tepat, atau Anda dapat menambahkan baris ke crontab Anda untuk mengatur $PATH
( man 5 crontab
untuk detail).