Eu esperaria que o script parasse no comando "su" porque está solicitando uma senha e não obtendo uma.
Como muitas soluções múltiplas para isso :)
Em vez de "su", use "sudo", que tem o comutador -S para aceitar uma senha da entrada padrão:
echo "password" | sudo -S -u USER1 sh -c "...
Como alternativa, mova essa seção de seu aplicativo / script que precisa ser executado como um usuário diferente para um aplicativo auxiliar. Você pode evitar o script com uma senha de texto não criptografada (que tem algumas preocupações de segurança) usando o set-uid e set-gid nesse aplicativo auxiliar:
chown USER1.GRP1 helperapp
chmod 6755 helperapp
O risco que você corre com isso é que agora qualquer pessoa no sistema pode executar o helperapp como USER1. Em vez de usar set-uid / gid você pode usar o sudo configure para permitir que um usuário específico execute o het helperapp como USER1 sem um prompt de senha (isso requer privilégios admin / root):
# /etc/sudoers
# Allow USER2 to run helperapp as USER1 without prompting for a password
USER2 ALL=(USER1) NOPASSWD:/path/to/helperapp
seu código pode se parecer com isso:
#!/bin/ksh
(some code)
Log=~/my.log
chown USER1 filename
sudo -u USER1 /path/to/helperapp | tee -a ${Log} 2>&1;
Nada disso foi testado e usado por sua própria conta e risco ...