Назад | Перейти на главную страницу

как вставить результат postgres в переменную оболочки

Я хочу установить весь этот синтаксис в переменной

 su -l postgres -c "psql -c \"CREATE DATABASE graphite WITH OWNER graphite\""

 CREATE DATABASE 

поэтому я написал это

 res=$(  su -l postgres -c "psql -c \"CREATE DATABASE graphite WITH OWNER graphite\"" )

CREATE DATABASE 

но $res пусто

echo $res

Я тоже пытался добавить " " но безуспешно.

Как вставить результаты

 su -l postgres -c "psql -c \"CREATE DATABASE graphite WITH OWNER graphite\""

в переменную оболочки?

Ответить на этот вопрос немного сложно.

Под "вставкой результатов ..." вы вставляете имя базы данных 'graphite' в качестве переменной для других команд в скрипте?

Как вы обрабатываете запрос пароля, который должен появляться при смене пользователя? Или этот скрипт запускается root?

И я не понимаю, почему вы используете -l option - обычно это список команд. Вы хотите, чтобы эта команда запускалась как postgres? Тогда вы должны использовать -u postgres параметр, сообщающий команде, чтобы она запускала это как пользователь postgres.

В-третьих, убедитесь, что у вас есть способ ввести учетные данные / пароль для пользователя su, в зависимости от того, какой пользователь фактически запускает скрипт.

Предполагая, что вы можете:

  1. Запустите весь сценарий как sudo, а не пытайтесь изменить пользователей внутри сценария, который обычно генерирует запрос пароля.

  2. Вы пробовали использовать sudo -u postgres? Пользователь postgres должен находиться в файле / etc / sudoers.

  3. Что вы видите в системном журнале? Вероятно, возникла ошибка из-за запуска этого сценария и невыполнения команды. А вы проверили права доступа к библиотекам, командам и каталогам postgres?

  4. Может, попробуй как sudo -u postgres -H -- plsql "CREATE DATABASE graphite WITH OWNER graphite"

Вот хорошее описание и примеры этих команд: Linux СУ, СУДО