2016-09-25 32 views
0

得到了#!/usr/bin/expect -f#!/bin/bash;现在我得到了错误:期望语法错误./auto.sh ./auto.sh:第12行:意外令牌附近的语法错误}} ./auto.sh:line 12:`}'

./autom.sh: line 7: syntax error near unexpected token `}' 
./autom.sh: line 7: `"*\#" { send "cd /var-tmp"; send "./scmd.sh -tmp /var/tmp -plugins /var/tmp/plugins -dmore \r"; }' 

代码:

set i 0 
IP_FILE="./hst.txt" 

for i in `cat $IP_FILE`; do 
sapwn ssh "@$i" 
expect { 
"*\#" { send "cd /var-tmp"; send "./scmd.sh -tmp /var/tmp -plugins /var/tmp/plugins -dmore \r"; } 
"*\#" { puts "ejecucion exitosa" } 
} 
EOD 
done>>logfile.txt` 
+1

删除'#在/ usr/bin中/预期'因为只有一个bash是必需的 – anubhava

+0

你的问题是令人困惑的格式化;我希望我改进了它。我将'。/ utom.sh'改为'。/ autom.sh' - 在发布时名称如何切换? (另外,标题引用'./ auto.sh',但是body引用'./ autom.sh' - 请保持一致!)你应该修正'spawn'的拼写(它不是'sapwn')。你有一些'expect'的代码伪装成shell脚本;这是导致错误。你忘了在线路上的某处运行预期吗?也许'在'do'之后和'sapwn'或'spawn'之前预期<< EOD'? –

回答

1

相反,固定你怎么庆典之间和接口的期望,它更容易只是停止使用期望在所有的!

#!/bin/bash 
ip_file=hst.txt 

while read -r ip; do 
    ssh "$ip" 'bash -s' <<'EOF' 
cd /var-tmp || { echo "Could not cd to /var-tmp" >&2; exit 1; } 
./scmd.sh -tmp /var/tmp -plugins /var/tmp/plugins -dmore 
EOF 
done <"$ip_file" >>logfile.txt 
0

这似乎是一个bash脚本其中有想到代码混了进去。根据错误EOD那里我猜这应该是一个HERE文档,但你已经失去了实际的期望调用。也许试试这个:

#!/bin/bash 

set i 0 
IP_FILE="./hst.txt" 

for i in `cat $IP_FILE`; do 
expect - <<EOD 
spawn ssh "@$i" 
expect { 
"*\#" { send "cd /var-tmp\r"; send "./scmd.sh -tmp /var/tmp -plugins /var/tmp/plugins -dmore \r"; } 
"*\#" { puts "ejecucion exitosa" } 
} 
EOD 
done>>logfile.txt 

编辑:添加了\r你的第一个cd命令后固定的spawn拼写。

编辑#2:而且,正如@CharlesDuffy提到的,阅读for行不是一个好主意。这样的事情是更好:

#!/bin/bash 

set i 0 
IP_FILE="./hst.txt" 

while read -r i; do 
expect - <<EOD 
sapwn ssh "@$i" 
expect { 
"*\#" { send "cd /var-tmp"; send "./scmd.sh -tmp /var/tmp -plugins /var/tmp/plugins -dmore \r"; } 
"*\#" { puts "ejecucion exitosa" } 
} 
EOD 
done < "$IP_FILE" >> logfile.txt 
相关问题