期望 lrange 在开头和结尾添加 { }

expect lrange adding { } at beginning and end

我观察到一件奇怪的事情,当我用命令行执行下面的脚本时,没有发送发送密码。如果我在没有命令行参数的情况下执行,它工作正常。可能是密码末尾有 $ 的问题。如果 $ 出现在末尾,则 $pass 是打印包含在 {} 中的密码。 因此发送密码发送错误,我无法执行 ssh。

#!/usr/bin/expect
set name [lrange $argv 0 0]
set pass [lrange $argv 1 1]  
set server [lrange $argv 2 2] 

puts $name
puts $server
puts $pass

spawn ssh $name@$server
sleep 2
expect "assword:"
send  "$pass\r"
send  "\r"
interact

执行

# ./login.sh root Abc1Cef4$ XX.XX.XX.XX
root
XX.XX.XX.XX
{Abc1Cef4$}
spawn ssh root@10.45.60.22
Password: 
Password: 

lrange 会 return 一个 list。你应该使用 lindex:

set name   [lindex $argv 0]
set pass   [lindex $argv 1]  
set server [lindex $argv 2]