Как установить переменную окружения в shebang (#!) Скрипта, который будет запускаться Bash? - PullRequest
2 голосов
/ 30 мая 2019

Или, почему это не работает, если вы правильно установили файл как исполняемый?(В моей системе он просто зависает, но может быть убит с помощью ^ C.)

#!/usr/bin/env TEST=TEST python
print('hello')

Пока это происходит:

#!/usr/bin/env python
print('hello')

Как это происходит:

[fred@pc build]$ /usr/bin/env TEST=TEST python hello.py 
hello

1 Ответ

0 голосов
/ 30 мая 2019

В некоторых системах, включая Linux, эффект

#!/usr/bin/env TEST=TEST python

строка в 'hello.py', если вы запускаете ее с './hello.py', совпадает с

/usr/bin/env 'TEST=TEST python' ./hello.py

Обратите внимание, что 'TEST = TEST python' - это все один аргумент. Это заставляет 'env' установить переменную окружения TEST равной 'TEST python', а затем запустить ./hello.py с exec . Затем линия Шебанга обрабатывается снова, и процесс повторяется рекурсивно. Общий эффект заключается в том, что env выполняется снова и снова, пока процесс не будет прерван. Если вы запустите top в системе во время выполнения, вы увидите очень загруженный процесс.

См. Статью Shebang (Unix) в Википедии, чтобы узнать, как работает механизм #!. Он включает в себя некоторые детали различий в том, как он обрабатывается в разных системах.

Невозможно установить переменные среды в строке shebang в Linux и многих других системах. Вам нужно будет либо установить их в самой программе, либо, если это не подходит, использовать программу-оболочку (например, тривиальную программу оболочки) для запуска программы Python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...