Я хочу установить весь этот синтаксис в переменной
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, в зависимости от того, какой пользователь фактически запускает скрипт.
Предполагая, что вы можете:
Запустите весь сценарий как sudo, а не пытайтесь изменить пользователей внутри сценария, который обычно генерирует запрос пароля.
Вы пробовали использовать sudo -u postgres
? Пользователь postgres должен находиться в файле / etc / sudoers.
Что вы видите в системном журнале? Вероятно, возникла ошибка из-за запуска этого сценария и невыполнения команды. А вы проверили права доступа к библиотекам, командам и каталогам postgres?
Может, попробуй как sudo -u postgres -H -- plsql "CREATE DATABASE graphite WITH OWNER graphite"
Вот хорошее описание и примеры этих команд: Linux СУ, СУДО