Se você quiser que todo o script seja executado como outro usuário, minha técnica usual para fazer isso é adicionar algo semelhante ao seguinte no topo do script:
target_user="foo"
if [ "$(whoami)" != "$target_user" ]; then
exec sudo -u "$target_user" -- "$0" "$@"
fi
Observe que eu uso sudo
aqui e não su
. su
torna estupidamente difícil transmitir argumentos corretamente, enquanto sudo
não tem esse problema.
Se você deseja apenas executar um pequeno código, pode fazer algo como:
target_user="foo"
sudo -u "$target_user" sh -s "$@" <<'EOF'
echo "$@"
EOF
Isso lançará sh
, passará os argumentos do script atual e executará o script fornecido por meio do heredoc.