Para a simulação de login (sem passar pelo "sudo -i"), você precisa usar o comando "su".
Verificando a página man do parâmetro '-':
-, -l, --login
Starts the shell as login shell with an environment similar to a real login:
o clears all environment variables except for TERM
o initializes the environment variables HOME, SHELL, USER, LOGNAME, PATH
o changes to the target user's home directory
o sets argv[0] of the shell to '-' in order to make the shell a login shell
Além disso, você precisa usar aqui-doc .
Como exemplo, você pode verificar a impressão do ID do usuário logado usando o comando 'id':
#\bin\bash
id
su - user <<EOF
userPassword
id
#here you can execute your script
EOF
id
Além disso, se o seu programa faz uma falha de segmentação, ele tenta acessar outro segmento de memória que não pertence ao programa.