PDA

View Full Version : [Bash] strano comportamento echo su telnet


cionci
03-06-2009, 09:56
Tanto per iniziare il codice:

(
sleep 2
echo "$USER"
echo "$PASSWORD"
sleep 1
echo "echo SNR=\`nvram get adsl_snr | sed 's/name=\([0-9]*\)/\1/g'\`"
sleep 2
echo "exit"
) | telnet -E $ROUTERIP

L'output prodotto è questo:

Connected to xxx.yyy.zzz.kkk.
Escape character is 'off'.
Login: xyz
xyz
Password:


BusyBox v1.01 (2008.12.08-15:16+0000) Built-in shell (ash)
Enter 'help' for a list of built-in commands.

# /g'`echo SNR=`nvram get adsl_snr | sed 's/name=\([0-9]*\)/
/bin/sh: /g`echo SNR=`nvram get adsl_snr | sed s/name=([0-9]*)/: not found
# Connection closed by foreign host.

Come vedete /g'` viene messo in cima alla stringa, avete idea di come possa accadere ?

cionci
03-06-2009, 10:17
Il problema sembra essere qui:

echo "echo SNR=\`nvram get adsl_snr | sed 's/name=\([0-9]*\)/\1/g'\`"

Ma anche raddoppiando il backslash non ottengo niente :muro:

Caldwell83
03-06-2009, 11:15
Potresti farmi un esempio di quello che restituisce il comando
nvram get adsl_snr
e cosa dovrebbe diventare dopo il sed?
Cosi magari si riesce a scrivere la sed in modo diverso senza usare il \1 che è quello che fa casino.

cionci
03-06-2009, 11:22
Il comando restituisce

name=XXX

dove XXX è un numero intero da 1 a 3 cifre. A me serve il numero XXX.

Ma perché secondo te si pianta lì ? A me sembrava come un carattere di escape, ma ho disabilitato i caratteri di escape da telnet.

cionci
03-06-2009, 11:38
Sono ancora agli inizi con sed, bastava fare così ;)

echo "name=199" | sed 's/name=//'

Caldwell83
03-06-2009, 11:39
:D