スクリプトがエラーを返すことが予想される

スクリプトがエラーを返すことが予想される

リモート マシンには、./bin/show_info.py実行してローカル マシンで出力を取得したいスクリプトが 1 つあり、そのために 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"

関連情報