Com base nos seus comentários:
Realize que su, a menos que seja executado como root, exige que você forneça a senha do usuário para su. A razão pela qual o sudo ./test.sh funciona é que você está executando test.sh como root! (O sudo assume como padrão root, se você não der um switch -u.
Então, se você quiser que o script seja capaz de su para outro usuário, ele deve ser executado como root (não faça isso).
Por que não usar apenas "sudo -u pat" no script, em vez de "su pat -c"?