Existem vários problemas com o seu código.
-
sulê a senha de/dev/tty, não destdin, então você não pode redirecionar a senha assim. De fato, o quesufaz por padrão é iniciar um shell como o usuário de destino, portanto, se você executar isso comoroot:su - testuser <<- _EOF_ 123456 #password _EOF_O
suserá bem-sucedido (a raiz não precisa de uma senha para fazer isso), mas o123456será passado como entrada para o shell do usuário, e é por isso que quando você executa seu script:-bash: line 1: 123456: command not foundSe você quiser fazer isso como um usuário não-root, provavelmente deve seguir o conselho de bahamt e usar
sudo, que pode ser configurado para oferecer acesso sem senha a comandos específicos como um usuário diferente. -
Mesmo se o
sufuncionar, ele gera um novo processo. O comandosusaiu (e retornou para a conta original) antes do comandolsser executado. Então o que você realmente quer é:su - testuser <<EOF ls -lih EOF