LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 777|回复: 4

关于用EXPECT实现自动交互设置用户密码的问题 [基本解决]

[复制链接]
发表于 2004-12-23 13:41:01 | 显示全部楼层 |阅读模式
写了脚本:userpasswd(见后),来实现给系统新用户赋予同样的初始密码,但出现怪问题:有的时候前几次都不成功,屏幕显示:
[root@linux root]#./userpasswd abc
spawn passwd abc
Changing password for user abc
New password: linux147       (在这大概停顿8秒)
(空一行)
Retype new password: [root@linux root]#

然后什么都没有修改,又重复运行,又成功了,的确修改的用户abc的密码。一般出现前面的情况2~4次后就可以象下面显示一样成功一次:

[root@linux root]#./userpasswd abc
spawn passwd abc
Changing password for user abc
New password: linux147      (没有停顿)
(空一行)
Retype new password: linux147
(空一行)
passwd:all authentication tokens updated successfully.


那位高手知道这是为什么??我的系统是RH9,EXPECT的版本是5.38.0,TCL的版本是8.3.5



****文件userpasswd内容********
#!/usr/bin/expect
set username [lindex $argv 0]
set password linux147
spawn passwd $username
expect "New password: "
send "$password\r"
expect "Retype new password: "
send "$password\r"
expect eof
exit
发表于 2004-12-24 01:44:32 | 显示全部楼层
set timeout 5
set send_human {.1 .3 1 .05 1}
发表于 2004-12-24 01:46:15 | 显示全部楼层
use "send -h" instead of "send". 加上这些设定,看是不是运行的好些。
 楼主| 发表于 2004-12-24 12:21:32 | 显示全部楼层
多谢斑竹呀,按您的修改,的确好了,但能否麻烦您解释一下下面这句话的意思
set send_human {.1 .3 1 .05 1}

还有send加上-h表示什么?

刚学EXPECT,不是很明白,若您方便的请回答一下,十分感谢!
发表于 2004-12-24 12:37:25 | 显示全部楼层
send_human表示让expect模拟人手的输入, 你知道人手的输入速度是有限的, 电脑的输入是lighting speed, 伪终端有时catch不上. send -h 也是同样的作用, 表示输出到终端的时候expect也要模拟人手操作. 我原来用expect的时候也有这样的问题, 后来熟看了manpage后知道有这么个开关. 建议可以多看看man.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表