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

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

boa.exp script accetta questo comando di accesso a un computer Linux ed esegue lo script.Escaping doppi apici nello script 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 "$" 

Ma questo script è di rimuovere le prime virgolette nel comando e la stampa come

uscita è

SetBaseStationParam(\PDP_ACTIVATION_REJECT",0); 

risultato atteso è

SetBaseStationParam("PDP_ACTIVATION_REJECT",0); 

Per favore fatemi sapere se c'è qualche soluzione per questo

risposta

6

Quando si utilizzano i doppi backslash, il carattere di escape della barra rovesciata è di escape, quindi il modo corretto per evitare un preventivo è \".

Tuttavia, una soluzione migliore è utilizzare qq(). Può essere utilizzato con una grande varietà di personaggi come delimitatore, come | ad esempio:

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

o nel vostro caso, anche utilizzare le virgolette singole

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

È necessario essere consapevoli che non si utilizza

use strict; 
use warnings; 

È davvero una pessima idea.

+0

Non funzionava nemmeno con qq o virgolette singole ('). Ora l'output che è con qq o virgolette singole SetBaseStationParam (PDP_ACTIVATION_REJECT, 1) – Tkills

+0

Provare a utilizzare il modulo di elenco, ad es. 'system (qw | boa.exp SetBaseStationParam (" PDP_ACTIVATION_REJECT ", 0) |);' quindi la shell fa il quoting stesso. – TLP

Problemi correlati