所以,我正在编写一个Perl脚本,它一度需要处理另一个脚本的输出。我尝试通过在反引号中调用脚本来执行此操作:
my @output = `scriptName`;
我已经测试了我想在反引号中调用的脚本,它运行得很好 - 在同一个shell中我甚至调用了我的脚本。但是当我将其称为脚本的一部分时,它不会产生任何输出。该变量留空。
我尝试用system()执行命令,但仍然没有输出。我不知道为什么。但是,我传入脚本的具体参数在我修复PATH变量之前就已经引起了我的问题。通过Perl脚本调用脚本会以某种方式导致不同的环境变量吗?
编辑:好的,这是一个潜在的问题。我尝试使用反引号和system()来打印出我的PATH变量,并且它们都是空白的。我的Perl脚本由于某种原因无法使用我的PATH吗?
答案 0 :(得分:1)
这些问题的最常见原因是相对路径的差异。由于这个原因,我倾向于使用绝对路径。
此外,我觉得您的下标可能会打印到STDERR
而不是STDOUT
。反引号仅捕获STDOUT,因此您需要在2>&1
my @output = `scriptName 2>&1`;
NB:重定向不适用于所有shell(我相信当我遇到类似的问题时,tcsh并没有支持它)。 Bash接受重定向就好了。
答案 1 :(得分:0)
环境不是你的问题,除非你在调用脚本之前在perl中明确地调整它。我的建议是 - 对脚本进行双重检查,并检查相对路径。我注意到你没有./scriptName
- 所以如果它不在你的路径中,perl也无法找到它。