Какова цель использования #!/usr/bin/env <sh|bash|python>
притона по сравнению с #!/bin/bash
, #!/bin/sh
или #!/usr/bin/python
?
command-line
bash
environment
Tuminoid
источник
источник
Ответы:
Некоторые люди могут использовать другой Python (Perl и т. Д.), Чем системный.
/usr/bin/env python
запускает версию, настроенную как текущую, возможно, делая скрипт более переносимым.С другой стороны, как сообщается, некоторых систем нет
/usr/bin/env
. Кроме того, вы не можете использовать#!/usr/bin/env foo x
в качестве замены#!foo x
, потому чтоfoo x
будет интерпретироваться как один аргумент. Так что ценность такого подхода спорна.источник
info coreutils 'env invocation'
я вижу, эта форма вызова проверяет, что это внешний двоичный файл, а не встроенный в оболочку, но нет никаких признаков того, какenv python
он будет отличатьсяpython
?PATH
вероятно, включает в себя в/usr/local/bin
первую очередь. Если кто-то установил Python вручную, онenv
будет вызывать его, тогда как#!/usr/bin/python
обойдется.virtualenv
это довольно популярный инструмент, и он устанавливает исполняемый файл Python в рабочем каталоге. Вам понадобитсяenv
хитрость, чтобы заставить его работать правильно.env python
же, какpython
. Однако проблема в том, что вы не можете написать подобный шебанг#!python
: вам нужно указать полный путь.