我的语法是
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 进行计数,这可以为您节省一个过程并在 shell 命令中节省一些复杂性:
my $count = () = qx(pstree -p $pid);
qx()
与反引号做同样的事情。空括号放置qx()
在列表上下文中,这使它返回一个列表,然后在标量上下文中是大小。这是一个快捷方式:
my @list = qx(pstree -p $pid);
my $count = @list;