sudo
não retém a maioria das variáveis de ambiente. Se você quiser especificar variáveis de ambiente para um comando executado em sudo
, faça isso embora sudo
:
sudo PGPASSWORD="postgres" -u postgres psql -d pg_ldap -w --no-password -h localhost -p 5432 -t -c "SELECT id FROM radusers WHERE id=1"
O fato de sudo
permitir ou não isso dependerá da política de segurança em vigor no seu site.
Eu não recomendo essa abordagem, pois ela expõe a senha no histórico da linha de comando e na lista de processos. É muito melhor usar um arquivo .pgpass
ou, de preferência, configurar pg_hba.conf
para peer
autenticação de local
conexões do usuário postgres
.
Você pode usar um arquivo .pgpass
, mas deve ser o .pgpass
do usuário com quem você está sudo
, e não o usuário que você está sudo
ing de ; ele precisaria ser ~postgres/.pgpass
neste caso. Pense nisso: psql
executado como postgres
não sabe que você o executou via sudo
da sua conta, ele não sabe qual é a sua conta de usuário e, mesmo que tenha, não tem permissão de leitura como usuário postgres
to ~youruser/.pgpass
.
Além disso, -w
é o mesmo que --no-password
. Não faz sentido especificar ambos.