Shell-Script

期望腳本給出錯誤

  • April 27, 2017

在遠端機器上./bin/show_info.py,我想執行一個腳本並在本地機器上獲取輸出,為此我創建了一個帶有期望的腳本。

如果我執行以下命令,它可以正常工作,但是當腳本中提到的相同時,它會出錯。

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

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"

引用自:https://unix.stackexchange.com/questions/361576