Bu mutlaka daha iyi değil.
Bunun avantajı , kullanıcının ilk önce göründüğü #!/usr/bin/env python
her şeyi kullanabilmesidir .python
$PATH
Dezavantaj ait #!/usr/bin/env python
ne olursa olsun kullanmak olacaktır python
kullanı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/python
için işletim sistemi ile kurulmuş olanı kullanabilir . Bir başkası için, /home/phred/bin/python
tam olarak düzgün çalışmayan bir deney kullanabilir .
Ve eğer python
sadece yüklenir /usr/local/bin
, olmayan bir kullanıcı /usr/local/bin
içinde $PATH
bile 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/env
hü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/perl
Son 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/env
pü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 env
komutlara sahip değildi /usr/bin
. Bunların hiçbirinin önemli bir endişe olması muhtemel değildir. env
bu şekilde çalışırsa, birçok senaryo bu #!/usr/bin/env
numarayı 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, $PATH
tipik 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/env
hile işe yaramaz. Tam yolu belirtebilir veya ayarlamak için crontab'ınıza bir çizgi ekleyebilirsiniz $PATH
( man 5 crontab
ayrıntılar için).