Execute SU com argumento de linha de comando de senha

sudo tem a opção -S que permite fornecer uma senha por meio de um argumento de linha de comando.

su não. O script a seguir usa espera fornecer entrada para su passando stdin por meio de um tty.

#!/usr/bin/expect -f
#Usage: script.sh cmd user pass

set cmd [lindex $argv 0];
set user [lindex $argv 1];
set pass [lindex $argv 2];

log_user
0
spawn su
-c $cmd - $user
expect
"Password: "
log_user
1
send
"$passr"
expect
"$ "

Execute o script com

./runas.sh "ls -l" bob 1234