在脚本中需要sudo时使用期望输入密码 [英] use expect to enter password when need sudo in script

查看:76
本文介绍了在脚本中需要sudo时使用期望输入密码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Ubuntu 14.04并安装了Expect.我正在尝试编写一个脚本,以在出现提示时输入密码.
更新的代码:

I am using Ubuntu 14.04 and installed expect. I am trying to write a script to enter password when it prompted.
UPDATED Code:

  #!/usr/bin/expect -d
  set timeout 20

  set pw odroid
  spawn sudo apt-get update

  expect {\[sudo]\ password for odroid: }
  send "$pw\r"

  close

有什么建议吗?

更新错误:

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 }

推荐答案

引号过多.选择以下选项之一:

You have too many quotes. Choose one of:

expect {\[sudo\] password for odroid: }
expect "\\\[sudo\\\] password for odroid: "

显然,第一种选择更好.

Clearly the first option is better.

许多转义是必要的,因为1)方括号在glob模式中是特殊的,并且2)方括号在双引号中是特殊的Tcl语法(命令替换),但在花括号中没有.

Lots of escaping is necessary because 1) square brackets are special in a glob pattern, and 2) square brackets are special Tcl syntax (command substitution) in double quotes but not in curly braces.

这篇关于在脚本中需要sudo时使用期望输入密码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆