获取在perl脚本中执行unix命令的价值

时间:2012-06-24 13:12:12

标签: perl unix command execute

我正在通过perl脚本执行一个unix命令来获取一个direcory的大小。

$path = "/dir1/di2/";
system("du -sh $path");

如何将结果返回到perl脚本中。

我正在使用

$size = system("du -sh $path");
print $size

但是它给出了size = 0;

6 个答案:

答案 0 :(得分:5)

您也可以使用perl执行此操作,例如as shown here。像

这样的东西
use File::Find;           
find(sub { $size += -s if -f $_ }, $path);

答案 1 :(得分:3)

Perl语法与Bash语法非常相似。反引命令,它的输出将存储在变量中。

    my $variable = `command`;
    print $variable;

如果您的命令在多行上有输出,则可以将其分配给数组,例如:

    my @files = `ls -l`
    chomp @files;

然后,每个输出行将存储在数组的不同元素中。

如何进行反引用可能会因键盘布局而异。在美国布局上,它与代字号(〜)相同。

答案 2 :(得分:1)

system调用返回调用的状态,而不是输出。使用反引号(或qx运算符),如:

$size = qx(du -sh $path);

答案 3 :(得分:1)

它返回命令状态,这是成功的。

相反,请执行:

$size = `du -sh $path`

(反引号分隔命令)

答案 4 :(得分:1)

或者您可以将输出重定向到文件句柄并使用它来获取输出。

open (FD,"du -hs \"$path\" |");
while (<FD>) {
...
}

答案 5 :(得分:0)

#!/bin/perl
$path = "/dir1/di2/";
print(qx(du -sh $path));

这应该有效!