如果你没有root 权限,但是你有sudo 权限,但是sudo 之后要输入密码,怎么样自动输入密码
有可能你是这么写的
#!/usr/bin/expect
spawn sudo php test.php
expect "密码:"
send "yourpassword\r"
expect eof
exit
当你第一运行的时候的是没有问题的,但是如果你立即运行会报spawn id exp6 not open
这个什么原因呢
第一次将会正确运行,因为第一次sudo时需要密码;但是第二次运行时由于密码已经输过(默认情况下sudo密码再次输入时间为5分钟),则不会提示用户去输入,所以第一个expect将无法匹配到“密码”,而且必须注意的是如果是spawn命令出现交互式提问的但是expect匹配不上的话,那么expect “密码”将不会等待,而直接去执行expect eof。
这时就会报expect: spawn id exp6 not open,因为没有spawn在执行,后面的expect脚本也将会因为这个原因而不再执行;所以对于类似sudo这种命令分支不定的情况,最好是使用并行的方式进行处理;
所以应该改成这样的
#!/usr/bin/expect
spawn sudo php test.php
expect {
"口令*" {
send_user "sudo now\n"
send "your_password\r"
exp_continue
}
eof
{
send_user "eof\n"
}
}