期待语法错误./auto.sh ./auto.sh:line 12:意外标记附近的语法错误`}'。/ auto.sh:第12行:`}'

时间:2016-09-25 04:39:38

标签: bash shell

离开Xcode Default#!/usr/bin/expect -f;现在我收到了错误:

#!/bin/bash

代码:

./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";  }'

2 个答案:

答案 0 :(得分:1)

不是修复你在bash和期望之间的界面,而是更容易停止使用expect:

#!/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

答案 1 :(得分: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

编辑:在第一个cd命令后添加了\r并修复了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