2011-09-08 4 views

答えて

6

$rを印刷しないため、この例では機能しません。出力は変数$rに取り込まれます。 system()を代わりに使用すると、出力がSTDOUTに出力されているのを確認できますが、期待どおりの出力を使用することはできません。

ちょうど行います

print $r; 

更新: "エコー" は、すでにあなたに改行を与えるので、私は、printsayを変更しました。

コメントで述べたように、シェルのメタ文字をエスケープするには、あなたがquotemeta.

を使用することができますまた、変数にシェルからの出力をキャプチャする場合| moreは効果がありませんことを認識する必要があります。このプロセスは単純に:echo | more | $rで、moreをスキップすることもできます。

+0

bashに渡すときに文字列をエスケープする方法は? – lexer

+0

[quotemeta](http://perldoc.perl.org/functions/quotemeta.html)を使用できます。何を探すべきか分かっていれば、あなたは自分自身からエスケープすることができます。 – TLP

3

system()コマンドを使用してみてください:

my $s = "s" x 1000; 
my $r = system("echo $s |more"); 

はすべてあなたが表示されます's'になり、$rにはコマンドの結果(この場合は0)が表示されます。

+1

'$ s'に特殊文字が含まれているとどうなりますか? shell_escapeと同様の処理を行う関数はありますか? – lexer

+0

lexer、http://stackoverflow.com/q/3212128#3212171 – daxim

+0

@daxim、 'quotemeta'とは何が違うのですか? – lexer

関連する問題