Если Вы НЕ работаете с X программами с окнами, которые могут быть отправлены ключи, Вы, вероятно, ищете expect
, удобная и очень настраиваемая программа для выполнения других интерактивных программных оболочек, как будто пользователь управлял терминалом. Можно установить программные ответы для ответа на различный вывод с различными исходными данными.
Используйте подоболочку: (su -c 'psql -U postgres -c "<command>"' postgres) > file
В подоболочке можно отбросить полномочия сделать работа, но производить перенаправляется к исходной оболочке, которая все еще имеет исходные полномочия.
Можно хотеть использовать этот прием:
{ anycommand } | su -c 'tee file' user
tee(1)
утилита POSIX, таким образом, можно полагаться на ее доступность.
Или, с sudo
:
{ anycommand } | sudo -u user 'tee file'
sudo -u postgres psql -c '...' > file
и отредактируйте sudoers для отключения подсказок пароля для этой команды
– gelraen
30.01.2011, 23:33
Можно работать, сценарий оболочки с пользователем имеет лучшее разрешение записи (такое как корень), и когда Вы производите данные, должен записать в папку, что пользовательская пост-ГРЭС базы данных может записать в (такие как/tmp)
после конца записи данных переместите его в каталог, который Ваш сценарий оболочки имеет разрешение записать (как пользователь root, может записать в где угодно),
При предложении хитрых способов обойти ограничения безопасности Вы лучше спрашиваете себя, если Ваша цель действительно мудра. Я ничего не знаю о postgresql - Вы должны действительно быть зарегистрированы с администраторской учетной записью, чтобы сделать то, что Вы пытаетесь сделать, или есть ли некоторый способ, которым можно дать разрешения только для чтения для того, что это в учетную запись обычного пользователя?
Почему не делают Вас, просто делают это как это: sudo su postgres -c "psql ..." >/path/to/file
?
sudo su postgres -c "echo test"
показывает, что такая команда ничего не печатает. Переключение для укоренения с sudo -s
и затем выполнение su postgres -c "echo test"
действительно печатает тест, таким образом, кажется, что это sudo
это так или иначе ест вывод. Я понятия не имею почему, хотя, мое предположение - это sudo
и su -c
используйте подоболочки, stdout которых не перетаскивается до моей собственной оболочки.
– Christoph Wurm
29.01.2011, 13:41
sudo su postgres -c "echo \$USER"
печать postgres
на моем поле.
– alex
29.01.2011, 18:43