我正在使用Ubuntu 14.04并安装了expect。我正在尝试编写一个脚本,以便在提示时输入密码 更新代码:
#!/usr/bin/expect -d
set timeout 20
set pw odroid
spawn sudo apt-get update
expect {\[sudo]\ password for odroid: }
send "$pw\r"
close
有什么建议吗? THX
更新错误:
expect: does "" (spawn_id exp4) match glob pattern "\[sudo]\ password for odroid: "? no
[sudo] password for odroid:
expect: does "[sudo] password for odroid: " (spawn_id exp4) match glob pattern "\[sudo]\ password for odroid: "? yes
expect: set expect_out(0,string) "[sudo] password for odroid: "
expect: set expect_out(spawn_id) "exp4"
expect: set expect_out(buffer) "[sudo] password for odroid: "
send: sending "odroid\r" to { exp4 }
答案 0 :(得分:1)
你的报价太多了。选择以下之一:
expect {\[sudo\] password for odroid: }
expect "\\\[sudo\\\] password for odroid: "
显然,第一种选择更好。
大量的转义是必要的,因为1)方括号在glob模式中是特殊的,2)方括号是双引号中的特殊Tcl语法(命令替换),但不是花括号。
答案 1 :(得分:0)
解决问题的更通用的方法是匹配密码
expect "*?assword*"
这允许使用更通用的脚本,其中用户名不相关。
以下代码段也存在以下问题。基本上 $ pw 由外壳程序解释,需要在外部设置期望的TCL代码。
pw="Password1234"
expect -f - <<-EOF
set timeout 10
spawn sudo mysql_secure_installation
expect "*?assword*"
send -- "$pw\r"
expect eof
EOF
答案 2 :(得分:0)
尝试用这个替换,它应该可以正常工作。
expect "\[sudo\] password for odroid:\r"