Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tcl 期望lrange在开头和结尾添加{}_Tcl_Expect - Fatal编程技术网

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

Tcl 期望lrange在开头和结尾添加{},tcl,expect,Tcl,Expect,我观察到一件奇怪的事情,当我用命令行执行下面的脚本时,发送密码并没有被发送。如果我在没有命令行参数的情况下执行,它就可以正常工作。可能是密码末尾有$的问题。如果$出现在末尾,则puts$pass正在打印{}中包含的密码。 因此,发送密码被错误地发送,我无法执行ssh #!/usr/bin/expect set name [lrange $argv 0 0] set pass [lrange $argv 1 1] set server [lrange $argv 2 2] puts $na

我观察到一件奇怪的事情,当我用命令行执行下面的脚本时,发送密码并没有被发送。如果我在没有命令行参数的情况下执行,它就可以正常工作。可能是密码末尾有
$
的问题。如果
$
出现在末尾,则puts
$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
执行
lrange
将返回一个列表。您应该使用
lindex

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

或者,在一行中:
lassign$argv name pass server
--
lassign
是非常新的(在Tcl 8.5中)。在考虑可移植性时,我宁愿使用
foreach{abc}{123}
。:-)哦,我的天,对于“非常新”的某些定义:Tcl 8.5是在2007年发布的(}有好几年了,没有
lassign
的Tcl支持版本了。(8.4上非常旧的代码可以添加到TclX中,它有一个功能性但非常慢的实现,是我偷取语法的地方。)关于Tcl/expect编程,有一点是:您必须知道数据何时是列表,何时不是。
set name   [lindex $argv 0]
set pass   [lindex $argv 1]  
set server [lindex $argv 2]