Навіщо використовувати env у shebang?


Відповіді:


11

Деякі люди можуть використовувати інший пітон (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.