Search code examples
ubuntu-14.04expect

use expect to enter password when need sudo in script


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

Any suggestions? thx

UPDATE Errors:

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 }

Solution

  • You have too many quotes. Choose one of:

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

    Clearly the first option is better.

    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.