Por padrão, nem sudo nem su lê uma senha de stdin. Eles tentam usar um dispositivo terminal diretamente (algumas implementações podem até mesmo reclamar quando usadas em um tubo). Existe a opção sudo -S para alterar este comportamento, mas, até onde eu sei, não existe uma opção semelhante para su .
Solução: use expect .
expectis a program that "talks" to other interactive programs according to a script. Following the script,expectknows what can be expected from a program and what the correct response should be.[…]
In general,
expectis useful for running any program which requires interaction between the program and the user. All that is necessary is that the interaction can be characterized programmatically.
No seu caso, o script pode ser:
#!/usr/bin/expect
log_user 0
spawn /bin/su - otherusr
expect "Password: "
send "mypassword\n"
interact
Eu aconselho fazer este script acessível somente para você ( chmod go-rwx ). Outros usuários não devem ter permissão para lê-lo porque contém mypassword em texto simples; eles não devem ter permissão para executá-lo, porque ele dá acesso ao shell de otherusr .