如何在将由 Bash 运行的脚本的 shebang (#!) 中设置环境变量?



或者,假设您正确地将文件设置为可执行文件,为什么这不起作用?(在我的系统上,它只是挂起,但可以用^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程序。

最新更新