我的目标是让一个程序循环遍历两个文件,并使用file1和file2中所有行的组合来评估单独的shell脚本。我通过将它移出while循环验证了我的eval行。
#!/bin/bash
while read line1
do
while read line2
do
eval "ssh_connect $line1 $line2"
done < $FILE2
done < $FILE1
ssh_connect根据命令行参数中提供的用户名和密码创建新的ssh连接。
set username [lindex $argv 0];
set password [lindex $argv 1];
puts "$password"
puts "$username"
spawn ssh $username@<location>.com
expect "assword:"
send "$password\r"
interact
我已经确认上述脚本正常运行。但是,当我从while循环的子shell中调用它时,它会提示输入密码并且不会按预期放入密码。
如何修改我的第一个shell脚本,以便正确评估第二个shell脚本
答案 0 :(得分:2)
问题是Expect脚本中的interact
切换到从标准输入读取。由于stdin在此时被重定向到$FILE2
,因此它会读取该文件中的所有内容。当内循环重复时,文件中没有任何内容,因此循环终止。
您需要保存脚本的原始标准输入,并将ssh_connect
的输入重定向到该输入。
#!/bin/bash
exec 3<&0 # duplicate stdin on FD 3
while read line1
do
while read line2
do
eval "ssh_connect $line1 $line2" <&3
done < $FILE2
done < $FILE1