为什么在bash中使用显式解释器并不使用路径变量

时间:2017-12-05 14:32:10

标签: linux bash shell

假设我的脚本/tmp/printy.py只包含:

#! /usr/bin/python2.7
print "hello world"

为什么这样做:

chmod +x /tmp/printy.py
export PATH=$PATH:/tmp/
printy.py

但这并不是:

chmod +x /tmp/printy.py
export PATH=$PATH:/tmp/
python printy.py

还有什么可以添加到一个cron作业中,该作业应该使用特定的解释器运行printy.py,以使其有效?

很可能重复,但我找不到任何内容,也许我使用了错误的搜索字词?

1 个答案:

答案 0 :(得分:2)

shell中的路径查找仅适用于命令,而不适用于任意文件。在第一个示例中,printy.py是命令名称。在第二个中,它只是Python的一个参数,而Python并没有使用PATH来查找要运行的脚本;它希望printy.py位于当前的工作目录中。

您可以使用PYTHONPATH-m的组合来模拟:

PYTHONPATH=$PATH python -m printy