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

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

boa.exp Skript wird diesen Befehl Login auf einem Linux-Rechner und führt das Skript.Escaping doppelte Anführungszeichen in expect-Skript

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

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

send "$arg1\r" 
expect "$" 

Aber dieses Skript die erste doppelte Anführungszeichen in dem Befehl zu entfernen und drucken als

Ausgang ist

SetBaseStationParam(\PDP_ACTIVATION_REJECT",0); 

Erwartete Ausgabe

SetBaseStationParam("PDP_ACTIVATION_REJECT",0); 

ist Bitte lassen Sie mich wissen, wenn es dafür eine Lösung gibt

Antwort

6

Wenn Sie doppelte umgekehrte Schrägstriche verwenden, wird der umgekehrte Schrägstrich entfernt. Daher ist der richtige Weg, um ein Angebot zu umgehen, \".

Eine bessere Lösung ist jedoch qq() zu verwenden. Es kann mit einer Vielzahl von Zeichen als Trennzeichen, wie | zum Beispiel verwendet werden:

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

Oder in Ihrem Fall sogar Apostrophe

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

verwenden, sollten Sie sich bewusst sein, dass nicht

mit
use strict; 
use warnings; 

Ist eine sehr schlechte Idee.

+0

Es funktioniert nicht einmal mit qq oder einfache Anführungszeichen ('). Nun die Ausgabe, die mit qq oder einfache Anführungszeichen ist SetBaseStationParam (PDP_ACTIVATION_REJECT, 1) – Tkills

+0

Versuchen Sie, Liste Formular, z. 'system (qw | boa.exp SetBaseStationParam (" PDP_ACTIVATION_REJECT ", 0) |);' Dann zitiert die Shell selbst. – TLP