на удаленной машине есть один скрипт ./bin/show_info.py
, который я хочу выполнить и получить вывод на локальной машине, для чего я создал скрипт с expect.
Если я запускаю команду ниже, она работает правильно, но когда то же самое указано в скрипте, выдается ошибка.
ssh IPaddress "./bin/show_info.py | grep total -A2 | grep -v ^+ | grep -v ^- | sed 's/total.*//g'" > Report_2017.txt
ошибка скрипта
[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)
содержимое файла
#!/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
решение1
Двойные кавычки в вашем случае являются проблемой в expect
скрипте.
spawn sh -c "ssh IPaddress "./bin/show_info.py |.. sed 's/total.*//g'" > Report_2017.txt"
Просто обратите внимание, что из-за двойных кавычек, заканчивающихся после IPaddress, канал остается открытым.
Возможно, вам захочется попробовать это:
spawn sh -c "ssh IPaddress \"./bin/show_info.py |.. sed 's/total.*//g'\" > Report_2017.txt"