Зачем использовать env в Шебанге?


19

Какова цель использования #!/usr/bin/env <sh|bash|python>притона по сравнению с #!/bin/bash, #!/bin/shили #!/usr/bin/python?


4
Существует хороший ответ здесь в отношении общего пользования окр.
Кевин Боуэн

Ответы:


11

Некоторые люди могут использовать другой Python (Perl и т. Д.), Чем системный. /usr/bin/env pythonзапускает версию, настроенную как текущую, возможно, делая скрипт более переносимым.

С другой стороны, как сообщается, некоторых систем нет /usr/bin/env. Кроме того, вы не можете использовать #!/usr/bin/env foo xв качестве замены #!foo x, потому что foo xбудет интерпретироваться как один аргумент. Так что ценность такого подхода спорна.


1
Настроил где? Как info coreutils 'env invocation'я вижу, эта форма вызова проверяет, что это внешний двоичный файл, а не встроенный в оболочку, но нет никаких признаков того, как env pythonон будет отличаться python?
Туминоид

4
Ваш, PATHвероятно, включает в себя в /usr/local/binпервую очередь. Если кто-то установил Python вручную, он envбудет вызывать его, тогда как #!/usr/bin/pythonобойдется.
Роби Басак

2
virtualenvэто довольно популярный инструмент, и он устанавливает исполняемый файл Python в рабочем каталоге. Вам понадобится envхитрость, чтобы заставить его работать правильно.
Flimm

2
@Tuminoid: вы правы: так env pythonже, как python. Однако проблема в том, что вы не можете написать подобный шебанг #!python: вам нужно указать полный путь.
Андреа Корбеллини
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.