亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標題: perl變量傳入shell命令后提示shell語法錯誤 [打印本頁]

作者: db_pub    時間: 2014-11-12 11:55
標題: perl變量傳入shell命令后提示shell語法錯誤
本帖最后由 db_pub 于 2014-11-12 14:17 編輯

有如下要求 取出nfs掛接的所有目錄中剩余空間最大的一個,根據(jù)最大的再取得對應的目錄
在perl中時獲取最大的空間后,根據(jù)空間大小再取得對應掛接目錄是提示如下錯誤
   @nfsSize = `df -k | grep ":" | /usr/bin/awk '{print \$4}'`;
   @nfsDir = ();
   $max = 0;
   foreach $arrayTmp (@nfsSize)
   {
     if($max < $arrayTmp)
    {
      $max = $arrayTmp;
    }
   }
   
   @nfsDir = `df -k | grep ':' | grep $max |  /usr/bin/awk '{print \$4, \$NF}'`;
   print "nfsdir @nfsDir \n";

sh: syntax error at line 2: `|' unexpected
發(fā)現(xiàn)只要在帶有變量的后面在接其他shell命令就會提示shell語法錯誤
作者: jason680    時間: 2014-11-12 13:25
回復 1# db_pub

what do you want to do?
說說你想做什么?

X-Y Problem
http://www.72891.cn/forum.p ... mp;fromuid=24785593


作者: db_pub    時間: 2014-11-12 14:18
回復 2# jason680


    多謝提醒,這個表達的是有點問題,希望大家引以為戒
作者: db_pub    時間: 2014-11-12 14:49
問題已經(jīng)解決因為在獲取$max的值之后沒有用chomp函數(shù)去掉最后的換行符導致的,下面這樣是正確的

@nfsSize = `df -k | grep ":" | /usr/bin/awk '{print \$4}'`;
   @nfsDir = ();
   $max = 0;
   foreach $arrayTmp (@nfsSize)
   {
     if($max < $arrayTmp)
    {
      $max = $arrayTmp;
    }
   }
   chomp $max;
   @nfsDir = `df -k | grep ':' | grep $max |  /usr/bin/awk '{print \$4, \$NF}'`;
   print "nfsdir @nfsDir \n";
作者: schnell18    時間: 2014-11-13 23:13
回復 1# db_pub
這段Perl程序居然用了awk,令人匪夷所思。其實這個問題可以這么用Perl干凈利落的搞定:
  1. #!/usr/bin/env perl

  2. use strict;

  3. my @entries;
  4. open (my $fh, "du -k  |") or die "Fail to open pipe";
  5. while(<$fh>) {
  6.     chomp;
  7.     my ($size, $file) = split(/\s+/, $_);
  8.     push @entries, [$file, $size];
  9. }

  10. foreach my $entry (sort { $b->[1] <=> $a->[1] } @entries) {
  11.     printf "%s\t%d\n", $entry->[0], $entry->[1];
  12. }
復制代碼
或者如果你的操作系統(tǒng)夠新的話,coreutils 7.5 +,可以用G,M,K作單位, 根本不用Perl:
  1. du -sh * | sort -h -r
復制代碼
如果用k的話,在舊一點的系統(tǒng)上(RHEL 5.9)也能用:
  1. du -sk * | sort -n -r
復制代碼

作者: db_pub    時間: 2014-11-14 15:00
回復 5# schnell18

謝謝你的回復,所負責的程序以前使用perl寫的,我現(xiàn)在是實現(xiàn)新的功能擴展,F(xiàn)在是邊看perl資料邊做新功能擴展,很是蛋疼啊
   




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2