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 expect
Skript.
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"