2011-09-08 3 views

Trả lời

6

Nó không hoạt động trong ví dụ của bạn, bởi vì bạn không bao giờ in $r. Đầu ra được ghi trong biến $r. Bằng cách sử dụng system() thay vào đó, bạn có thể xem đầu ra được in ra STDOUT, nhưng sau đó bạn không thể sử dụng đầu ra như bạn (có thể) mong đợi.

Chỉ cần làm:

print $r; 

Cập nhật: Tôi đã thay đổi say-print, vì "echo" đã mang đến cho bạn một dòng mới.

Để thoát khỏi vỏ ký tự meta, như đã đề cập trong các ý kiến, bạn có thể sử dụng quotemeta.

Bạn cũng nên lưu ý rằng | more không có tác dụng khi chụp ra từ vỏ vào một biến. Quá trình này chỉ đơn giản là: echo | more | $r và bạn cũng có thể bỏ qua more.

+0

Làm thế nào để thoát khỏi chuỗi khi đi qua bash? – lexer

+0

Bạn có thể sử dụng [quotemeta] (http://perldoc.perl.org/functions/quotemeta.html). Hoặc bạn có thể tự thoát khỏi nhân vật, nếu bạn biết những gì cần tìm. – TLP

3

thử với lệnh system():

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

sẽ hiển thị tất cả các bạn 's', và trong $r bạn sẽ có kết quả (0 trong trường hợp này) của lệnh.

+1

Điều gì sẽ xảy ra nếu '$ s' chứa các ký tự đặc biệt? Có một chức năng để làm shell_escape giống như các công cụ? – lexer

+0

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

+0

@daxim, khác với 'quotemeta' là gì? – lexer