Existem vários problemas com o seu código.
-
su
lê a senha de/dev/tty
, não destdin
, então você não pode redirecionar a senha assim. De fato, o quesu
faz 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
su
será bem-sucedido (a raiz não precisa de uma senha para fazer isso), mas o123456
será passado como entrada para o shell do usuário, e é por isso que quando você executa seu script:-bash: line 1: 123456: command not found
Se 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
su
funcionar, ele gera um novo processo. O comandosu
saiu (e retornou para a conta original) antes do comandols
ser executado. Então o que você realmente quer é:su - testuser <<EOF ls -lih EOF