Dlaczego warto korzystać z env w shebang?

19

Jaki jest cel używania #!/usr/bin/env <sh|bash|python>shebang porównaniu do #!/bin/bash, #!/bin/shlub #!/usr/bin/python?

Tuminoid
źródło
4
Jest to dobra odpowiedź tutaj w odniesieniu do ogólnego użytku ENV.
Kevin Bowen

Odpowiedzi:

11

Niektóre osoby mogą używać innego pytona (perl itp.) Niż systemowy. /usr/bin/env pythonuruchomiłby wersję skonfigurowaną jako bieżąca, prawdopodobnie czyniąc skrypt bardziej przenośnym.

Z drugiej strony, podobno niektóre systemy nie mają /usr/bin/env. Nie można także użyć #!/usr/bin/env foo xjako zamiennika #!foo x, ponieważ foo xbędzie interpretowany jako pojedynczy argument. Tak więc wartość tego podejścia jest dyskusyjna.

choroba
źródło
1
Skonfigurowany gdzie? Od info coreutils 'env invocation'widzę tę formę nazywając dba o to zewnętrzny binarnego zamiast muszli wbudowany, ale nie wskazuje, w jaki sposób env pythonbędzie się różni od python?
Tuminoid
4
Twój PATHprawdopodobnie obejmuje /usr/local/binpierwszy. Jeśli ktoś ręcznie zainstalował tam Pythona, wtedy go envwywoła, podczas gdy #!/usr/bin/pythongo obejdzie.
Robie Basak
2
virtualenvjest dość popularnym narzędziem i instaluje plik wykonywalny Pythona w katalogu roboczym. Potrzebujesz envsztuczki, aby działał poprawnie.
Flimm
2
@Tuminoid: masz rację: env pythonjest taki sam jak python. Problem polega jednak na tym, że nie można napisać shebang typu #!python: musisz podać pełną ścieżkę.
Andrea Corbellini,