【发布时间】:2011-09-23 15:40:17
【问题描述】:
有很多goodreasons可以使用#! /usr/bin/env.底线:它使您的代码更具可移植性。嗯,有点。看看这个....
我有两个几乎相同的脚本,bintest.py
#! /usr/bin/python
import time
time.sleep(5*60)
和envtest.py
#! /usr/bin/env python
import time
time.sleep(5*60)
请注意,它们仅在 shebangs 上有所不同。
bintest.py 按预期运行
但是envtest.py 做的事情并不理想
我们看到的是,使用#! /usr/bin/env 导致进程接收到名称“python”而不是“envtest.py”,从而使我们的killall 无效。在某种程度上,我们似乎已经将一种可移植性换成了另一种:我们现在可以轻松地更换 python 解释器,但我们已经失去了命令行上的“kill-ability”。那是怎么回事?如果这里有实现两者的最佳实践,它是什么?
【问题讨论】:
-
还有一些充分的理由不使用
#!/usr/bin/env;见this question 和my answer。 -
@KeithThompson,我之所以为此提供赏金是因为我正在研究一组需要在 Linux 和 Mac OS X 上运行的脚本,它们将所需的可执行文件放在不同的放在 $PATH 中,但我仍然希望
top“正确”列出每个脚本,以便您可以区分一个脚本和另一个脚本。 -
解决方案不是使用安装脚本来替换 shebang 行上的正确本地解释器吗?
标签: command-line environment-variables portability kill shebang