如何使用bash脚本从其他目录运行代码

时间:2012-06-25 12:44:50

标签: python bash shell

我一直把我的代码放在github上,但是我遇到了一个实现障碍。我在许多计算机上运行相同的代码(包括我没有root访问权限的计算机)。

一段代码(一个bash脚本)调用一些python代码,如:

python somecode.py

shell将运行正确版本的python,但它不会找到somecode.py。

我尝试了什么:

失败#1:我试图将包含somecode.py的目录和文件的完整路径添加到PATH;无济于事。 [Errno 2]没有这样的文件或目录

失败#2:只有在顶行添加正确版本的python的完整路径时,我才能使它适用于一台计算机:

#!/usr/local/cool/python/version/location

然而,这会破坏它在任何其他计算机上运行。

失败#3:如果我让bash脚本说:

,我也可以使它工作
python /full/path/to/github/place/somecode.py

但同样,这仅适用于一台计算机,因为不同计算机的路径不同。

我真正想做的事情:我希望能够在多台计算机上使用相同的代码(bash脚本和somecode.py)。

欢迎任何有关如何正确执行此操作的建议。谢谢!

解决方案

补充:

#!/usr/bin/env python

到我的somecode.py代码的顶部;

mv somecode.py somecode
chmod +x somecode

确保PATH具有/ full / path / to / directory / with / somecode。

Bash脚本现在只说:

somecode

它有效。

2 个答案:

答案 0 :(得分:5)

问题#2尝试

#!/usr/bin/env python

虽然它可能会在不同的机器上找到不同版本的Python,但只要这不是问题就可以解决这个问题

也可以看到这个问题Python deployment and /usr/bin/env portability。这篇帖子由Alex Martelli重新使用。

答案 1 :(得分:2)

如果您说python somefile.py,那么它将somefile.py的位置作为当前目录,而不是$PATH。它将取自python的{​​{1}}位置。

如果您说$PATH,那么somefile.py的{​​{1}}的位置和somefile.py的{​​{1}}位置就会显示$PATH的位置脚本,如果你遵循@Levon的建议,可以使用PATH。