在远程服务器中发送Bash命令时使用List元素
我的expect脚本成功地连接到多个远程服务器并回显命令,但我无法让它回显列表中的项目 例如,当切换到在远程服务器中发送Bash命令时使用List元素,list,tcl,expect,List,Tcl,Expect,我的expect脚本成功地连接到多个远程服务器并回显命令,但我无法让它回显列表中的项目 例如,当切换到server1时,我想输出到终端水果:苹果 但是apple保存在expect中,而send将其发送到未定义列表的本地终端。是否可以向bash发送expect变量 特别是代码中与此相关的行: set counter 0 set types {apple orange} set var $types($counter) send -- "echo 'fruit:$var'\r" set $count
server1
时,我想输出到终端水果:苹果
但是apple
保存在expect
中,而send
将其发送到未定义列表的本地终端。是否可以向bash发送expect
变量
特别是代码中与此相关的行:
set counter 0
set types {apple orange}
set var $types($counter)
send -- "echo 'fruit:$var'\r"
set $counter [expr $counter+1]
完整代码:
#!/usr/bin/expect -f
# ./sshlogin.exp uptime
#declare hosts array"
set hosts {server1 server2}
set types {apple orange}
# setting credentials
set user jack
set password welcome
set counter 0
foreach vm $hosts {
set var $types($counter)
set timeout -1
# now ssh
spawn ssh $user@$vm -o StrictHostKeyChecking=no
match_max 100000 # Look for passwod prompt
expect "*?assword:*"
# Send password aka $password
send -- "$password\r"
# send blank line (\r) to make sure we get back to gui
expect "$ "
send -- "echo 'fruit:$var'\r"
expect "$ "
send -- "exit\r"
set $counter [expr $counter+1]
expect eof }
将第二个列表添加到foreach循环中,由于两者的长度相同,因此效果非常好
foreach
现在看起来像这样:
foreach vm $hosts fruit $types {....
此链接包含一个示例:
这是错误的
set counter 0
set types {apple orange}
set var $types($counter)
Tcl有两种类型,一种是数字索引数组,另一种是关联数组(散列)
您通常使用命令访问列表的元素。您可以使用
$arrname($key)
语法访问数组的元素
要解决这三行的直接问题:您想要
set var [lindex $types $counter]
您的答案是在2个列表上进行迭代的最佳方式,可以提取具有相同数字索引的元素
通过对两个列表使用foreach找到解决方法/解决方案;现在效果很好。谢谢。谢谢你的评论。格伦,我肯定计划今晚晚些时候再看一遍教程。