2012-12-12 35 views
5
#!/usr/bin/perl 

$command = "SetBaseStationParam(\\\"PDP_ACTIVATION_REJECT\\\",0);" 
system (boa.exp $command); 

lệnh boa.exp sẽ lấy lệnh này đăng nhập vào máy linux và thực thi tập lệnh.Thoát dấu ngoặc kép trong kịch bản mong đợi

# /Usr/bin/expect 
set timeout 5 
set arg1 [lindex 0] 
spawn ssh [email protected] 

expect "password:" 
send "pass\r" 
expect "$" 

send "$arg1\r" 
expect "$" 

Nhưng kịch bản này là loại bỏ các dấu ngoặc kép đầu tiên trong lệnh và in nó như

ra là

SetBaseStationParam(\PDP_ACTIVATION_REJECT",0); 

sản lượng dự kiến ​​là

SetBaseStationParam("PDP_ACTIVATION_REJECT",0); 

Xin vui lòng cho tôi biết nếu có bất kỳ giải pháp nào cho số

này

Trả lời

6

Khi bạn sử dụng dấu gạch chéo ngược kép nó thoát dấu gạch chéo ngược, do đó, cách thích hợp để thoát khỏi báo giá là \".

Tuy nhiên, giải pháp tốt hơn là sử dụng qq(). Nó có thể được sử dụng với một loạt các ký tự như dấu phân cách, chẳng hạn như | ví dụ:

$command = qq|SetBaseStationParam("PDP_ACTIVATION_REJECT",0)|; 

Hoặc trong trường hợp của bạn, thậm chí sử dụng dấu nháy đơn

$command = 'SetBaseStationParam("PDP_ACTIVATION_REJECT",0)'; 

Bạn nên lưu ý rằng không sử dụng

use strict; 
use warnings; 

Thực sự là một ý tưởng tồi.

+0

Nó không hoạt động ngay cả với qq hoặc dấu nháy đơn ('). Bây giờ đầu ra là với qq hoặc dấu nháy đơn SetBaseStationParam (PDP_ACTIVATION_REJECT, 1) – Tkills

+0

Hãy thử sử dụng biểu mẫu danh sách, ví dụ: 'system (qw | boa.exp SetBaseStationParam (" PDP_ACTIVATION_REJECT ", 0) |);' thì shell sẽ tự trích dẫn. – TLP

Các vấn đề liên quan