Na maioria das configurações, o sudo substitui a variável de ambiente PATH
por um padrão de tempo de compilação ou um valor especificado em /etc/sudoers
.
Você pode fazer a pesquisa de caminho antes de passar o comando para sudo
.
db2=$(unset -f db2; unalias db2 2>/dev/null; command -v db2)
sudo -u db2inst1 sh -c '"$0" connect to db; "$0" set …' "$db2"
No caso comum, quando você sabe que o comando não é uma função nem um alias no seu shell atual e que o caminho completo não contém nenhum caractere especial:
sudo -u db2inst1 sh -c "$(command -v db2) connect to db; $(command -v db2) set …"
Observe o uso de aspas duplas aqui, para que $(command -v db2)
seja avaliado no shell externo. Você pode alimentar comandos na entrada padrão para economizar mais digitação:
sudo -u db2inst1 $(command -v db2) <<\EOF
connect to db
set …
EOF