通过推断,您在 shell 命令行中运行的命令是:
tshark –r input.dump -V |
egrep "Source:|Destination:|Time since reference or first frame:|Source port:|Destination port:" |
grep –v "Vmware" >input.useful
在 Perl 中运行“相同”命令的最简单方法是逐字包装,使用非常有用的qq{}
符号来选择双引号而不是"
. 或者,实际上,将它包含在单引号中,甚至可能是q{}
.
my $cmd = q{
tshark –r input.dump -V |
egrep "Source:|Destination:|Time since reference or first frame:|Source port:|Destination port:" |
grep –v "Vmware" >input.useful
};
现在您可以使用以下命令运行它system
:
system $cmd;
我尝试了你的建议,我得到了与以前完全相同的错误。
很奇怪。我试过这个,这与你的例子接近同构:
#!/usr/bin/env perl
use strict;
use warnings;
my $cmd = q{
ls -l |
egrep "merge|sort" |
grep -v 'cpp$' > list.out
};
system $cmd;
它运行没有错误,生成list.out
文件:
-rw-r--r-- 1 jleffler staff 2064 Sep 21 13:54 keysort1.c
-rw-r--r-- 1 jleffler staff 2602 Sep 21 13:54 keysort2.c
-rwxr-xr-x 1 jleffler staff 14488 Sep 21 18:28 merge
-rw-r--r-- 1 jleffler staff 6274 Sep 21 13:54 merge.c
drwxr-xr-x 3 jleffler staff 102 Sep 21 18:28 merge.dSYM
-rw-r--r-- 1 jleffler staff 8633 Sep 21 06:49 mergesort.c
-rwxr-xr-x 1 jleffler staff 26232 Sep 21 18:01 mergesort2
drwxr-xr-x 3 jleffler staff 102 Sep 21 18:01 mergesort2.dSYM
-rw-r--r-- 1 jleffler staff 3335 Sep 21 17:25 msort.c
-rw-r--r-- 1 jleffler staff 16134 Sep 21 06:49 sorttest.c
这是“排序合并”分支上我的 SO 问题目录的当前正确输出。
你可以试试类似的测试吗?您的 shell ( $SHELL
) 设置为什么?
你能分阶段建立你的指挥吗?
- 运行'
tshark -r input.dump -V > input.raw
'通过system
,看看你得到什么。
- 运行'
tshark -r input.dump -V | egrep "Source:|Destination:" > input.parboiled
,看看你得到了什么。
- 运行'
cat input.parboiled | grep -v "Vmware" > input.semiuseful
',看看你得到了什么。
等等。有些东西应该让游戏消失。如果出现极端情况,请尝试set -x;
在命令之前添加,以便查看 shell 认为它正在运行的内容。