【发布时间】:2012-06-26 00:34:27
【问题描述】:
我正在通过 perl 脚本执行 unix 命令来获取目录的大小。
$path = "/dir1/di2/";
system("du -sh $path");
如何在我的 perl 脚本中返回结果。
我正在使用
$size = system("du -sh $path");
print $size
但它给出 size=0;
【问题讨论】:
我正在通过 perl 脚本执行 unix 命令来获取目录的大小。
$path = "/dir1/di2/";
system("du -sh $path");
如何在我的 perl 脚本中返回结果。
我正在使用
$size = system("du -sh $path");
print $size
但它给出 size=0;
【问题讨论】:
#!/bin/perl
$path = "/dir1/di2/";
print(qx(du -sh $path));
这应该可行!
【讨论】:
或者您可以将输出重定向到文件句柄并使用它来获取输出。
open (FD,"du -hs \"$path\" |");
while (<FD>) {
...
}
【讨论】:
Perl 语法与 Bash 非常相似。反引号你的命令,它的输出将存储在变量中。
my $variable = `command`;
print $variable;
如果你的命令有多行输出,你可以把它赋值给一个数组,例如:
my @files = `ls -l`
chomp @files;
然后,每个输出行将存储在数组的不同元素中。
如何进行反引号可能会因您的键盘布局而异。在美国布局上,它与波浪号 (~) 的键相同。
【讨论】:
它正在返回命令状态,即成功。
改为:
$size = `du -sh $path`
(反引号分隔命令)
【讨论】:
; rm -rf /”的路径,失败尤其糟糕。
您也可以使用perl 来执行此操作,例如as shown here。类似的东西
use File::Find;
find(sub { $size += -s if -f $_ }, $path);
【讨论】:
system 调用返回调用的状态,而不是输出。使用反引号(或 qx 运算符),例如:
$size = qx(du -sh $path);
【讨论】:
; rm -rf /”的路径,失败尤其糟糕。