首页 > 解决方案 > 如果我在脚本中导入,则无法使用 echo 命令

问题描述

我想在我的脚本中使用 expect 方法,所以我在脚本中使用了这个命令

#!/usr/bin/expect

现在我无法在使用此命令后声明任何数组甚至无法使用 echo 命令

完整代码

#!/usr/bin/expect
declare -a arr=("ip1" "ip2")
for i in "${arr[@]}"
do

   spawn ssh myhost@i
   send "exit\n"
done

整个数组声明和 for 循环会引发错误,例如无效的命令名称,我无法使用 echo 命令。当我在不导入的情况下尝试 echo 命令时,除了一切都按预期工作。

标签: shellloopsunixexpectscript

解决方案


第一行声明您的脚本是一个expect 脚本并且expect 脚本使用Tcl 脚本语言。您所做的是在同一个脚本中混合 bash 和 Tcl,这就是错误消息的原因。在 Tcl 中设置一个列表并循环很容易:

#!/usr/bin/expect
set arr {ip1 ip2}
foreach i $arr {
   spawn ssh myhost@$i
   send "exit\r"
}

推荐阅读