en la máquina remota hay un script ./bin/show_info.py
que quiero ejecutar y obtener el resultado en la máquina local, para el cual he creado un script con expect.
Si ejecuto el siguiente comando, funciona correctamente, pero cuando se menciona lo mismo en el script, aparece un error.
ssh IPaddress "./bin/show_info.py | grep total -A2 | grep -v ^+ | grep -v ^- | sed 's/total.*//g'" > Report_2017.txt
error de guión
[root@centseven ~]# ./directconnect
spawn echo -e > Report_2017.txt
extra characters after close-quote
while executing
"spawn sh -c "ssh IPaddress "./bin/show_info.py | grep total -A2 | grep -v ^+ | grep -v ^- | sed 's/total.*//g'" > Report_2017.tx..."
(file "./directconnect" line 6)
contenido del archivo
#!/usr/bin/env expect
set timeout 5
spawn echo -e > Report_2017.txt
spawn sh -c "ssh IPaddress "./bin/show_info.py | grep total -A2 | grep -v ^+ | grep -v ^- | sed 's/total.*//g'" > Report_2017.txt"
expect "Enter passphrase for key '/root/.ssh/id_rsa':"
send "12345\r"
expect "Enter passphrase for key '/root/.ssh/id_rsa':"
send "12345\r"
expect "Enter passphrase for key '/root/.ssh/id_rsa':"
send "12345\r"
expect "Password:"
send "54321\r"
interact
Respuesta1
Las comillas dobles son un problema en tu caso en el expect
script.
spawn sh -c "ssh IPaddress "./bin/show_info.py |.. sed 's/total.*//g'" > Report_2017.txt"
Simplemente observe que debido a las comillas dobles que terminan después de la dirección IP, la tubería queda expuesta.
Quizás quieras probar esto:
spawn sh -c "ssh IPaddress \"./bin/show_info.py |.. sed 's/total.*//g'\" > Report_2017.txt"