0

リモート マシンの xml ファイルからバージョン番号を取得しようとしています。これは、Net::SSH::Perlcmd関数を介して行います。次のようになります。

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シェルで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 モジュールとは何の関係もありません。

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

プリントも

<version>2.6</version>

4

1 に答える 1

3

二重引用符を使用しています。二重引用符で囲まれた\は特別なので、+代わりにのみ\+が に渡されsedます。

演算子を使用してq()、バックスラッシュのバックスラッシュを回避できます。

$ssh->cmd(q(head -11 /some/path/to/the/file.xml | tail -1 | sed 's/<[^>]\+>//g' | xargs));
于 2013-08-30T09:25:42.987 に答える