Perl反引号的行为与控制台命令不同

时间:2014-04-11 13:52:24

标签: perl

所以,我正在编写一个Perl脚本,它一度需要处理另一个脚本的输出。我尝试通过在反引号中调用脚本来执行此操作:

 my @output = `scriptName`;

我已经测试了我想在反引号中调用的脚本,它运行得很好 - 在同一个shell中我甚至调用了我的脚本。但是当我将其称为脚本的一部分时,它不会产生任何输出。该变量留空。

我尝试用system()执行命令,但仍然没有输出。我不知道为什么。但是,我传入脚本的具体参数在我修复PATH变量之前就已经引起了我的问题。通过Perl脚本调用脚本会以某种方式导致不同的环境变量吗?

编辑:好的,这是一个潜在的问题。我尝试使用反引号和system()来打印出我的PATH变量,并且它们都是空白的。我的Perl脚本由于某种原因无法使用我的PATH吗?

2 个答案:

答案 0 :(得分:1)

这些问题的最常见原因是相对路径的差异。由于这个原因,我倾向于使用绝对路径。

此外,我觉得您的下标可能会打印到STDERR而不是STDOUT。反引号仅捕获STDOUT,因此您需要在2>&1

的帮助下进行重定向
my @output = `scriptName 2>&1`;

NB:重定向不适用于所有shell(我相信当我遇到类似的问题时,tcsh并没有支持它)。 Bash接受重定向就好了。

答案 1 :(得分:0)

环境不是你的问题,除非你在调用脚本之前在perl中明确地调整它。我的建议是 - 对脚本进行双重检查,并检查相对路径。我注意到你没有./scriptName - 所以如果它不在你的路径中,perl也无法找到它。