【问题标题】:Get value of execution of a unix command in perl script在 perl 脚本中获取执行 unix 命令的值
【发布时间】: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 command execute


【解决方案1】:
#!/bin/perl
$path = "/dir1/di2/";
print(qx(du -sh $path));

这应该可行!

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      如果你的命令有多行输出,你可以把它赋值给一个数组,例如:

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

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

      如何进行反引号可能会因您的键盘布局而异。在美国布局上,它与波浪号 (~) 的键相同。

      【讨论】:

        【解决方案4】:

        它正在返回命令状态,即成功。

        改为:

        $size = `du -sh $path`
        

        (反引号分隔命令)

        【讨论】:

        • 路径带有空格失败。对于名为“; rm -rf /”的路径,失败尤其糟糕。
        【解决方案5】:

        您也可以使用perl 来执行此操作,例如as shown here。类似的东西

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

        【讨论】:

          【解决方案6】:

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

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

          【讨论】:

          • 带有空格的路径失败。对于名为“; rm -rf /”的路径,失败尤其糟糕。
          猜你喜欢
          • 2012-03-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-12
          • 2013-06-17
          • 1970-01-01
          • 2012-10-20
          相关资源
          最近更新 更多