调用shell命令的Perl脚本不起作用

时间:2015-04-18 19:53:41

标签: perl shell

我正在编写一个简单的Perl程序来测试shell脚本以更改目录。但它不起作用。

这是我的代码:

$result = `cd/`;
print $result;  

使用

时效果很好
$result =`dir`;

3 个答案:

答案 0 :(得分:4)

如果您需要更改脚本中的cwd目录,则应使用Perl的内置chdir功能。 perldoc -f chdir

答案 1 :(得分:3)

cd(默认情况下)不输出任何内容,因此您要为您的$result变量分配空字符串。< / p>

如果你想输出你改变的目录的(完整)路径,只需在反引号中附加&& pwd

 $result = `cd / && pwd`;

请注意,`...`创建了一个子进程,用于使用指定的命令运行shell,因此您在那里执行的任何环境更改(包括更改目录)都不会影响Perl脚本本身

换句话说:您不是用shell命令更改 Perl脚本的当前目录。


如果您的意图是:

  • 简单测试您在`...` 中包含的shell命令是否成功 ,请使用{ {3}}而是; e.g:

        system('cd /') == 0 || die "Command failed";
    
  • 捕获 shell命令的输出,假设它是一个目录路径, system() function 为它:

        $result = `cd / && pwd` || die "Command failed.";
        chomp $result; # trim trailing newline
    
        # Change Perl script's working dir.
        chdir $result || die "Could not change to $result.";
    

答案 2 :(得分:2)

要影响perl进程的当前工作目录,请使用chdir()函数。