我正在通过perl脚本执行一个unix命令来获取一个direcory的大小。
$path = "/dir1/di2/";
system("du -sh $path");
如何将结果返回到perl脚本中。
我正在使用
$size = system("du -sh $path");
print $size
但是它给出了size = 0;
答案 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));
这应该有效!