2013-10-10 29 views
0
使用管道

我的語法是如何在Perl

my $pstree = `pstree -p $pid|wc`; 

,但我得到一個錯誤。

sh: -c: line 1: syntax error near unexpected token `|' 

有什麼想法?

回答

2

您的變量$pid不只是一個數字;它可能有一個尾隨的換行符。

use Data::Dumper; 
print Data::Dumper->new([$pid])->Terse(1)->Useqq(1)->Dump; 
+0

'print Dumper($ pid)'可能已經足夠了。 – jordanm

+0

@jordanm:不,Useqq對於顯示非打印字符非常重要 – ysth

1

它是有效的Perl,你的shell是什麼抱怨:

與看到它。你把#!/ bin/perl放在腳本的頂部嗎?它可能被bash解釋,而不是perl。

host:/var/tmp root# ./try.pl 
5992 zsched 
    6875 /usr/local/sbin/sshd -f /usr/local/etc/sshd_config 
    3691 /usr/local/sbin/sshd -f /usr/local/etc/sshd_config -R 
     3711 -tcsh 
     6084 top 60 
=== 
     5  16  175 


host:/var/tmp root# cat try.pl 
#!/bin/perl 

my $pstree = `ptree 3691`; 
my $wc = `ptree 3691 | wc`; 
print STDOUT $pstree; 
print STDOUT "===\n"; 
print STDOUT $wc; 
1

除了使用殼裏做你的票,你可以使用Perl,這樣可以節省一個過程,一些在你的shell命令的複雜性:

my $count =() = qx(pstree -p $pid); 

qx()做同樣的事情,反引號。空括號將qx()放在列表上下文中,這使得它返回一個列表,然後在標量上下文中是列表的大小。這是一個快捷方式:

my @list = qx(pstree -p $pid); 
my $count = @list; 
+0

wc統計字符,單詞和行(不帶命令開關) – ysth