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

时间:2019-05-30 08:49:29

标签: bash unix

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

2 个答案:

答案 0 :(得分:3)

由于版本8.30 env具有选项-S,因此可以使事情变 在linux中也可以工作:

使用

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

答案 1 :(得分:0)

在某些系统(包括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。然后再次处理shebang行,然后递归重复该过程。总体效果是一遍又一遍地执行env,直到该过程被中断为止。如果在执行过程中在系统上运行top,将会看到非常繁忙的过程。

有关#!机制如何工作的信息,请参见Shebang (Unix)维基百科文章。它包含一些细节的差异,这些差异在不同系统上的处理方式不同。

在Linux和许多其他系统上,无法在shebang行上设置环境变量。您需要在程序本身中设置它们,或者,如果不合适,请使用包装程序(例如琐碎的Shell程序)运行Python程序。