下面的命令通过命令行运行:
expect -c 'spawn ssh username@Host ; expect "assword:" ; send "<password>\r" ; interact;'
如果我包含在脚本中,则下面的内容不起作用
while read server_from_file
do
expect -c 'spawn ssh username@${server_from_file}; expect "assword:" ; send "<password>\r" ; interact;'
done < serverlist.conf
也请让我知道如何使用上述脚本运行某些命令
答案 0 :(得分:0)
expect
从其环境继承stdin。在第一种情况下,expect
使用脚本的标准输入作为其标准输入。在第二种情况下,expect
从封闭的while循环继承stdin,因此它将从文件中读取。一种典型的解决方案是为循环使用不同的fd。例如:
while read server_from_file <&3
do
expect -c 'spawn ssh username@${server_from_file}; expect "assword:" ; send "<password>\r" ; interact;'
done <3 serverlist.conf
(请注意,某些shell提供-u,还有其他方法可以做到这一点,但这应该使您指向正确的方向。)