Belum tentu lebih baik.
Keuntungannya #!/usr/bin/env pythonadalah bahwa ia akan menggunakan apa pun yang pythondapat dieksekusi muncul pertama kali di pengguna $PATH.
The Kerugian dari #!/usr/bin/env pythonadalah bahwa ia akan menggunakan apa pun yang pythondieksekusi 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/pythonyang diinstal dengan OS. Untuk yang lain, mungkin menggunakan eksperimen /home/phred/bin/pythonyang tidak berfungsi dengan benar.
Dan jika pythonhanya dipasang di /usr/local/bin, pengguna yang tidak memiliki /usr/local/bindi $PATHbahkan 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/pythonAnda menentukan penerjemah mana yang akan digunakan untuk menjalankan skrip pada sistem tertentu .
Masalah potensial lainnya adalah bahwa #!/usr/bin/envtriknya 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/perlakhir - akhir ini; ini kembali ke masa ketika Perl sering tidak diinstal secara default.)
Poin minor: #!/usr/bin/envtrik ini bisa dibilang merupakan penyalahgunaan envperintah, 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 envperintah /usr/bin. Tak satu pun dari ini cenderung menjadi perhatian yang signifikan. envtidak bekerja dengan cara ini, banyak skrip yang menggunakan #!/usr/bin/envtrik, 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, $PATHbiasanya 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 $PATHdi shell pengguna, maka /usr/bin/envtriknya tidak akan berhasil. Anda dapat menentukan jalur yang tepat, atau Anda dapat menambahkan baris ke crontab Anda untuk mengatur $PATH( man 5 crontabuntuk detail).