LINUX.ORG.RU

PostgreSQL

 


0

1

Привет. Непонятная странность. Если делаю команду

sudo -s -u postgres /usr/bin/psql -q -A -t -c 'SELECT datname FROM pg_database'

из консоли - всё работает (выводит список баз данных).

Но если эту же команду закину в BASH-скрипт и запущу его, то получаю:

psql: ВАЖНО: пользователь «FROM» не прошёл проверку подлинности (Peer)

Может кто-нибудь объяснить, почему это так и как исправить?

★★★★★

man bash
/set
-x

и смотри, что там тебе скрипт выплёвывает на самом деле. Как вариант, sudo не отрабатывает корректно.

Crewger
()
~# cat pg-script.sh

#!/bin/bash

sudo -s -u postgres /usr/bin/psql -q -A -t -c 'SELECT datname FROM pg_database'



~# ./pg-script.sh

template0
...


У меня отрабатывает.

Crewger
()
Ответ на: комментарий от Crewger

С чего бы sudo отрабатывать некорректно.

Единственная мысль - может быть, sudo в скрипте не все переменные окружения подхватывает.

Более того, даже пробовал сделать скрипт:

/usr/local/bin/assa:

#!/bin/bash

/usr/bin/psql -q -A -t -c 'SELECT datname FROM pg_database'

и потом уже запускать его sudo -s -u postgres /usr/local/bin/assa - c тем же результатом.

slamd64 ★★★★★
() автор топика

а почему не сделать «su -c ....»?

или ваще не делать судо в скрипте а запускать скрипт под судо?

т.к. судо может не нормально отработать вторую часть команды, надо использовать su -c если уж так хочется

safocl ★★
()
Последнее исправление: safocl (всего исправлений: 1)
Ответ на: комментарий от Crewger

Разобрался в чем дело. Было чуть сложнее:

postgresql=«/usr/bin/psql -q -A -t -c 'SELECT datname FROM pg_database' »

for i in `$postgresql`; do

...

done

заменил на

for i in `/usr/bin/psql -q -A -t -c 'SELECT datname FROM pg_database'`; do

...

done

и заработало.

Спасибо.

slamd64 ★★★★★
() автор топика
Ответ на: комментарий от slamd64

хммм... потому чо

postgresql=$(/usr/bin/psql -q -A -t -c 'SELECT datname FROM pg_database')

а не как у тебя

safocl ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.