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

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

boa.expスクリプトはこのコマンドをLinuxマシンにログインし、スクリプトを実行します。expectスクリプトで二重引用符をエスケープする

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

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

send "$arg1\r" 
expect "$" 

しかし、このスクリプトは、コマンドの最初の二重引用符を削除し、

出力として、それを印刷している

SetBaseStationParam(\PDP_ACTIVATION_REJECT",0); 

の予想される出力は

SetBaseStationParam("PDP_ACTIVATION_REJECT",0); 

です私に知らせてくださいこのための解決策があれば

答えて

6

ダブルバックスラッシュを使用すると、バックスラッシュがエスケープされるため、引用符をエスケープする正しい方法は\"です。

ただし、より良い解決方法はqq()です。あなたは

を使用していないことに注意する必要があり
$command = qq|SetBaseStationParam("PDP_ACTIVATION_REJECT",0)|; 

またはあなたの場合

が、でも使用単一引用符

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

を:それは、例えば|として、区切り文字として文字の多種多様で使用することができます

use strict; 
use warnings; 

実際には非常に悪い考えです。

+0

qqや一重引用符( ')を使用しても機能しませんでした。 qqまたは一重引用符で囲まれた出力 SetBaseStationParam(PDP_ACTIVATION_REJECT、1) – Tkills

+0

リスト形式を使用してみてください。 'system(qw | boa.exp SetBaseStationParam(" PDP_ACTIVATION_REJECT "、0)|);'次に、シェルは引用自体を行います。 – TLP

関連する問題