Bu mutlaka daha iyi değil.
Bunun avantajı , kullanıcının ilk önce göründüğü #!/usr/bin/env pythonher şeyi kullanabilmesidir .python$PATH
Dezavantaj ait #!/usr/bin/env pythonne olursa olsun kullanmak olacaktır pythonkullanıcının ilk görünen yürütülebilir $PATH.
Bu, senaryoyu kimin çalıştırdığına bağlı olarak farklı davranabileceği anlamına gelir. Bir kullanıcı /usr/bin/pythoniçin işletim sistemi ile kurulmuş olanı kullanabilir . Bir başkası için, /home/phred/bin/pythontam olarak düzgün çalışmayan bir deney kullanabilir .
Ve eğer pythonsadece yüklenir /usr/local/bin, olmayan bir kullanıcı /usr/local/biniçinde $PATHbile komut dosyasını çalıştırmak mümkün olmayacaktır. (Bu muhtemelen modern sistemlerde pek olası değildir, ancak daha belirsiz bir tercüman için kolayca olabilir.)
Belirterek #!/usr/bin/python, komut dosyasını belirli bir sistemde çalıştırmak için tam olarak hangi tercümanın kullanılacağını belirtin .
Bir diğer potansiyel sorun olduğunu #!/usr/bin/envhüner Eğer intrepreter argümanlar geçmesine izin vermez (örtük geçirilen komut, adı başka). Bu genellikle bir sorun değil, olabilir. Birçok Perl betiği ile yazılmıştır #!/usr/bin/perl -w, ancak use warnings;bugünlerde önerilen değiştirmedir. Csh scriptleri kullanmalı #!/bin/csh -f- fakat csh scriptleri her şeyden önce önerilmez . Ancak başka örnekler olabilir.
Yeni bir sistemde bir hesap kurduğumda kurduğum kişisel bir kaynak kontrol sisteminde bir dizi Perl betiği var. #!Her betiğin satırını benim yerime koyarken değiştiren bir yükleyici betiği kullanıyorum $HOME/bin. ( #!/usr/bin/perlSon zamanlarda başka bir şey kullanmak zorunda kalmamıştım ; Perl sık sık varsayılan olarak yüklenmediği zamanlara dayanıyor.)
Küçük bir nokta: #!/usr/bin/envpüf nokta , tartışmalı bir envşekilde, değiştirilmiş bir çevreye sahip bir komutu çağırmak için esasen amaçlanan komutun kötüye kullanılmasıdır . Ayrıca, bazı eski sistemler (doğru hatırlıyorsam SunOS 4 dahil) bu envkomutlara sahip değildi /usr/bin. Bunların hiçbirinin önemli bir endişe olması muhtemel değildir. envbu şekilde çalışırsa, birçok senaryo bu #!/usr/bin/envnumarayı kullanır ve işletim sistemi sağlayıcılarının bu sorunu çözecek bir şey yapması beklenmez. Bu belki size komut gerçekten eski sistemde çalıştırmak istiyorum, ama o zaman yine de değiştirmeniz gereken muhtemel iseniz bir sorun olabilir.
Bir diğer olası sorun (Sopalajo de Arrierez'in yorumlarda gösterdiği için teşekkür ederiz), cron işlerinin sınırlı bir ortamda yürüdüğüdür. Özellikle, $PATHtipik olarak bir şeydir /usr/bin:/bin. Bu nedenle, tercümanı içeren dizin bu dizinlerden birinde bulunmuyorsa $PATH, bir kullanıcı kabuğundaki varsayılan ayarlarınızda olsa bile , /usr/bin/envhile işe yaramaz. Tam yolu belirtebilir veya ayarlamak için crontab'ınıza bir çizgi ekleyebilirsiniz $PATH( man 5 crontabayrıntılar için).