Jaki jest cel używania #!/usr/bin/env <sh|bash|python>
shebang porównaniu do #!/bin/bash
, #!/bin/sh
lub #!/usr/bin/python
?
command-line
bash
environment
Tuminoid
źródło
źródło
Odpowiedzi:
Niektóre osoby mogą używać innego pytona (perl itp.) Niż systemowy.
/usr/bin/env python
uruchomił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 x
jako zamiennika#!foo x
, ponieważfoo x
będzie interpretowany jako pojedynczy argument. Tak więc wartość tego podejścia jest dyskusyjna.źródło
info coreutils 'env invocation'
widzę tę formę nazywając dba o to zewnętrzny binarnego zamiast muszli wbudowany, ale nie wskazuje, w jaki sposóbenv python
będzie się różni odpython
?PATH
prawdopodobnie obejmuje/usr/local/bin
pierwszy. Jeśli ktoś ręcznie zainstalował tam Pythona, wtedy goenv
wywoła, podczas gdy#!/usr/bin/python
go obejdzie.virtualenv
jest dość popularnym narzędziem i instaluje plik wykonywalny Pythona w katalogu roboczym. Potrzebujeszenv
sztuczki, aby działał poprawnie.env python
jest taki sam jakpython
. Problem polega jednak na tym, że nie można napisać shebang typu#!python
: musisz podać pełną ścieżkę.