采购python脚本

时间:2013-09-02 16:36:41

标签: python linux bash shell

最近,我遇到了Linux命令source,然后找到this answer它的功能。

我的理解是source执行传递给它的文件,它确实适用于简单的shell脚本。然后我尝试在Python脚本上使用source - 但它不起作用。

Python脚本有一个shebang(例如#!/usr/bin/python),我可以执行./python.py,因为脚本具有可执行权限。如果可能,source python.py也应该是可能的,对吧?唯一的区别是./在新shell中执行,source在当前shell中执行。为什么它不适用于.py脚本?我在这里错过了什么吗?

2 个答案:

答案 0 :(得分:5)

您仍然没有完全了解source的内容。

source确实从当前shell进程中的文件执行命令。它有效地实现了这一点,就好像您已将它们直接输入到当前shell中一样。

这是必要的原因是因为当你运行一个shell脚本而没有获取它时,它会产生一个子shell--一个新的进程。当此进程退出时,在返回到它生成的shell时,该脚本中所做的任何更改都将丢失。

接下来,您无法将Python导入shell,因为Python解释器始终与shell不同。运行Python脚本会产生一个全新的流程,当该流程退出时,其状态就会丢失。

当然,如果你的shell 实际上是 Python(我不推荐!),你仍然可以"来源"进入它 - 使用import

答案 1 :(得分:2)

source执行文件并将在该脚本中创建的任何函数/别名/环境变量放在调用它的shell中。它通过不生成新进程来执行此操作,而是在当前进程中执行脚本。

shell使用shabang来指示生成新进程的内容,因此对于source它将被忽略,并且该文件被解释为当前进程的语言(bash在这种情况下)。这就是为什么在python文件上使用source失败的原因。