Erwarte, dass das Skript einen Fehler ausgibt

Erwarte, dass das Skript einen Fehler ausgibt

Auf dem Remote-Computer gibt es ein Skript ./bin/show_info.py, das ich ausführen und die Ausgabe auf dem lokalen Computer erhalten möchte. Dafür habe ich ein Skript mit expect erstellt.

Wenn ich den folgenden Befehl ausführe, funktioniert es ordnungsgemäß. Wenn derselbe Befehl jedoch im Skript erwähnt wird, tritt ein Fehler auf.

ssh IPaddress "./bin/show_info.py |  grep  total -A2 | grep -v ^+ | grep -v ^-  | sed 's/total.*//g'" > Report_2017.txt

Skriptfehler

[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)

Dateiinhalt

#!/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

Antwort1

Problematisch sind in deinem Fall die doppelten Anführungszeichen im expectSkript.

spawn sh -c "ssh IPaddress "./bin/show_info.py |.. sed 's/total.*//g'" > Report_2017.txt"

Beachten Sie einfach, dass die Pipe aufgrund der Anführungszeichen, die nach der IP-Adresse enden, sichtbar bleibt.

Vielleicht möchten Sie Folgendes versuchen:

spawn sh -c "ssh IPaddress \"./bin/show_info.py |.. sed 's/total.*//g'\" > Report_2017.txt"

verwandte Informationen