或者,假设您正确地将文件设置为可执行文件,为什么这不起作用?(在我的系统上,它只是挂起,但可以用^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
自 8.30 版 env 有选项 -S,这使得事情变得 也可以在 Linux 中工作:
用
#!/usr/bin/env -S TEST=TEST python
在某些系统上,包括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'
,然后使用 exec 运行./hello.py
。 然后再次处理舍邦线,并递归重复该过程。 总体效果是一遍又一遍地执行env
,直到过程中断。 如果在执行过程中在系统上运行top
,您将看到一个非常繁忙的过程。
有关#!
机制如何工作的信息,请参阅 Shebang (Unix) 维基百科文章。 它包括不同系统上处理方式之间的差异的一些细节。
在Linux 和许多其他系统上无法在 shebang 行上设置环境变量。 您需要在程序本身中设置它们,或者,如果不合适,请使用包装程序(例如简单的shell程序)来运行Python程序。