【发布时间】:2014-04-11 13:52:23
【问题描述】:
所以,我正在编写一个 Perl 脚本,它有时需要处理另一个脚本的输出。我试图通过在反引号中调用脚本来做到这一点:
my @output = `scriptName`;
我已经测试了我想在反引号中调用的脚本,它工作得很好——甚至在我调用我的脚本的同一个 shell 中。但是当我将它作为脚本的一部分调用时,它不会产生任何输出。变量为空。
我尝试使用 system() 执行命令,但仍然没有输出。我不知道为什么。但是,在我修复 PATH 变量之前,我传递给脚本的特定参数给我带来了问题。通过 Perl 脚本调用脚本会以某种方式导致不同的环境变量吗?
编辑:好的,这是一个潜在的问题。我尝试使用反引号和 system() 打印出我的 PATH 变量,但它们都是空白的。我的 Perl 脚本是否由于某种原因无法使用我的 PATH?
【问题讨论】:
-
您使用的是哪个操作系统?
-
子进程的环境与父进程的环境相同。看看它是否适合您使用标准命令行实用程序,例如
ls。还要检查您尝试运行的脚本是否没有将其输出发送到STDERR,因为您从反引号中得到的只是发送到STDOUT的所有内容。你也可以试试my @output = `perl -e "print 'working'"` -
我在 linux 环境中,并确认反引号和 system() 都可以与“ls”一起使用。我还没有尝试过 STDERR,但我会的。
-
PATH 和所有环境变量一样,继承自父进程。
-
请记住,在将结果字符串传递给 shell 之前,反引号将插入
$PATH,就好像它是一个 perl 变量一样。 (你是use warnings吗?)通过反引号打印PATH的正确perl 语法是`echo \$PATH`(带反斜杠)或qx'echo $PATH'(带单引号)。
标签: perl