Perls系统($ command)在shell上返回除命令之外的其他结果

时间:2013-08-30 09:01:34

标签: perl bash

我正在尝试从远程计算机上的xml文件中获取版本号。我通过Net :: SSH :: Perl cmd函数执行此操作。它看起来像这样:

my ($version, $err, $exit) = $ssh->cmd("head -11 /some/path/to/the/file.xml | tail -1 | sed 's/<[^>]\+>//g' | xargs");
print Dumper $version;

我想要实现的目的是从XML标记中提取数字<version>2.6</version>

当我通过PuTTy

在ssh-shell上使用cmd时,它工作得很好
user@remotemachine:~>head -11 /some/path/to/the/file.xml | tail -1 | sed 's/<[^>]\+>//g' | xargs
2.6
user@remotemachine:~>

然而,Perl打印

$VAR1 = '<version>2.6</version>
';

任何想法,为什么它不起作用?

编辑:显然它与Net :: SSH :: Perl-module无关,因为

perl -e "system(\"head -11 /some/path/to/the/file.xml | tail -1 | sed 's/<[^>]\+>//g' | xargs\");"

同时打印

<version>2.6</version>

1 个答案:

答案 0 :(得分:3)

您正在使用双引号。在双引号中,\是特殊的,因此只有+而非\+传递给sed

您可以使用q()运算符来避免反斜杠反斜杠:

$ssh->cmd(q(head -11 /some/path/to/the/file.xml | tail -1 | sed 's/<[^>]\+>//g' | xargs));