我的語法是如何在Perl
my $pstree = `pstree -p $pid|wc`;
,但我得到一個錯誤。
sh: -c: line 1: syntax error near unexpected token `|'
有什麼想法?
我的語法是如何在Perl
my $pstree = `pstree -p $pid|wc`;
,但我得到一個錯誤。
sh: -c: line 1: syntax error near unexpected token `|'
有什麼想法?
您的變量$pid
不只是一個數字;它可能有一個尾隨的換行符。
use Data::Dumper;
print Data::Dumper->new([$pid])->Terse(1)->Useqq(1)->Dump;
它是有效的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;
除了使用殼裏做你的票,你可以使用Perl,這樣可以節省一個過程,一些在你的shell命令的複雜性:
my $count =() = qx(pstree -p $pid);
qx()
做同樣的事情,反引號。空括號將qx()
放在列表上下文中,這使得它返回一個列表,然後在標量上下文中是列表的大小。這是一個快捷方式:
my @list = qx(pstree -p $pid);
my $count = @list;
wc統計字符,單詞和行(不帶命令開關) – ysth
'print Dumper($ pid)'可能已經足夠了。 – jordanm
@jordanm:不,Useqq對於顯示非打印字符非常重要 – ysth