2015-11-18 100 views
1

我正在尝试source来自Perl脚本(script.pl)的脚本。如何从perl脚本运行“source”命令(Linux)?

system ("source /some/generic/script"); 

请注意,此通用脚本可能是shell,python或任何其他脚本。另外,我不能将这个通用脚本中的逻辑复制到我的Perl脚本中。我尝试用``,execqx//替换system。每次我得到了以下错误:

不能Exec的“源”:在script.pl行没有这样的文件或目录18

我在许多论坛来在互联网上,其中讨论了各种这个问题的原因。但他们都没有提供解决方案。有没有办法从Perl脚本运行/执行source命令?

回答

1

你不能。 source是一个shell函数,可将该脚本的内容“导入”到当前环境中。这不是可执行文件。

可以复制它的一些功能,通过滚动自己 - 运行或解析无论你是“采购”和捕捉到的结果:

print `. file_to_source; echo $somevar`; 

或相似。

5

在bash等中,source是内建的,表示读取此文件,并在本地解释它(有点像#include)。

在这种情况下没有任何意义 - 您需要从命令中删除source,并在shell脚本的开头有一个shebang(#!)行,告诉系统使用哪个shell来执行该脚本,或者您需要明确告诉system使用哪个shell,例如

system "/bin/sh", "/some/generic/script"; 

[有关它是否真正适合在这种情况下使用system无可奉告。

+0

如果我不知道(不确定)它是哪种(shell或其他)脚本,该怎么办?在我的例子中,待调用的脚本在文件的开头没有shebang('#!')行。 – Anand

+0

在这种情况下,它需要一个。恕我直言*每个*解释脚本应该有一个。 – Alnitak

+0

如果它没有shebang,你必须假定它是用'/ bin/sh'来执行的。 – chepner