如何将当前工作目录更改为特定目录并执行特定目录下的程序?

时间:2013-06-23 12:28:50

标签: perl

我想将目录复制到多个目录中,并在每个目录下执行script.pl。但是script.pl没有执行(它没有打印Hello)。

script.pl的内容是

#!/usr/bin/perl
print "Hello\n";

$ARGV[1]是一个目录,其下有一个script.pl,我想将这个目录复制到几个目录(使用$ARGV[0]提供的名称)。

$ARGV[0]是一个目录,其中有几个文件,我将这些文件用作名称..

看起来像这样

perl this_program.pl Data X

Data                X
A B C D             script.pl

我想将X复制到A,B,C和D并执行A,B,C和D下的script.pl。

这是我的计划:

#/usr/bin/perl

use Cwd;
opendir(Dir,$ARGV[0]) or die "!!!\n";
@Data = readdir(Dir);
shift(@Data);
shift(@Data);
closedir Dir;

mkdir("Copys");

for($i=0;$i<=$#Data;$i++)
{
    $working_dir = getcwd(); # Keep the path of current working directory
    print $working_dir."\n";
    `cp -r $ARGV[1] Copys/$Data[$i]`;
    `mv Copys/$Data[$i] /disk`;

    chdir("/disk/$Data[$i]"); #Change to /disk/A to execute the script.pl under A 
    $working_dir2 = getcwd();
    print $working_dir2."\n";
    `perl script.pl`;  # Execute the script.pl under A

    chdir($working_dir);
}

1 个答案:

答案 0 :(得分:3)

您的一个主要问题是您没有在反引号中捕获命令的返回值(输出)。你只是扔掉你想要的输出。做类似的事情:

my $output = `perl ./script.pl`

system("perl ./script.pl")