Perché usare env in shebang?


19

Qual è lo scopo dell'utilizzo di #!/usr/bin/env <sh|bash|python>shebang rispetto a #!/bin/bash, #!/bin/sho #!/usr/bin/python?


4
C'è una buona risposta qui per quanto riguarda l'uso generale di env.
Kevin Bowen,

Risposte:


11

Alcune persone potrebbero usare un pitone diverso (perl, ecc.) Rispetto a quello di sistema. /usr/bin/env pythoneseguirà la versione configurata come quella corrente, probabilmente rendendo lo script più portatile.

D'altra parte, secondo come riferito, alcuni sistemi non hanno /usr/bin/env. Inoltre, non è possibile utilizzare #!/usr/bin/env foo xcome sostituto di #!foo x, poiché foo xverrà interpretato come un singolo argomento. Quindi il valore dell'approccio è discutibile.


1
Configurato dove? Da quanto info coreutils 'env invocation'posso vedere questa forma di chiamata si assicura che sia binario esterno invece della shell integrata, ma nessuna indicazione in che modo env pythonsarebbe diverso da python?
Tuminoide,

4
Il tuo PATHprobabilmente include /usr/local/binprima. Se qualcuno ha installato manualmente Python lì, envlo chiamerà, mentre #!/usr/bin/pythonlo bypasserà.
Robie Basak,

2
virtualenvè uno strumento abbastanza popolare e installa un eseguibile python nella directory di lavoro. Avresti bisogno del envtrucco per farlo funzionare correttamente.
Flimm,

2
@Tuminoid: hai ragione: env pythonè lo stesso di python. Tuttavia il problema è che non puoi scrivere un shebang come #!python: devi specificare un percorso completo.
Andrea Corbellini,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.