Posted to tcl by rahl at Mon Nov 14 13:15:09 GMT 2022view pretty

#!/bin/expect -f

if {[llength $argv] != 3} {
    exit 1
}

set user [lindex $argv 0]
set passwd [lindex $argv 1]
set command [lindex $argv 2]

set fp [open "$passwd" r]
set user_pass [lindex $data 0]
close $fp

# The problem appears to be down to passing a potentially layered command
# e.g. ssh -t <server> uname leads to tcl (expect) error:
# "sudo: ssh -t <server> uname: command not found"
spawn sudo -u $user $command

expect {
    # TODO: Currently specific to ssh, but should handle local sudo as well
    -re "Enter passphrase for key.*" {
        send "${user_pass}\r"
    }
}
expect eof

foreach {pid spawnid os_error_flag value} [wait] break
#lassign [wait] pid spawnid os_error_flag value

if {$os_error_flag == 0} {
    puts "exit status: $value"
} else {
    puts "errno: $value"
}

exit $value