У меня есть сценарий оболочки, сгенерированный java jar, что я не могу запустить что-либо postgres, связанные с его созданием. Однако при копировании всего его содержимого в новый файл сценария оболочки я могу без проблем выполнить сценарий. Содержимое скрипта в основном просто подключается к моей базе данных postgres, создает новую базу данных и заполняет ее. Вот фрагмент:

#!/bin/bash

export DATABASE_NAME="dbname"
export DB_USERNAME="postgres"
psql -c "drop database $DATABASE_NAME;" postgres postgres
psql -c "create database $DATABASE_NAME;" postgres postgres

echo "Starting scripts"
psql -f db/pgsql/schema/schema.sql $DATABASE_NAME $DB_USERNAME

Любые идеи о том, почему это так?

РЕДАКТИРОВАТЬ: Для пояснения сценарий ошибки, когда он достигает этой строки:

psql -c "удалить базу данных $ DATABASE_NAME;" postgres postgres

Это дает следующую ошибку для каждой строки, которая должна быть выполнена в этом файле:

PSQL: fe_sendauth: пароль не указан

Вещи, которые я подтвердил:

  • Сценарий оболочки является исполняемым

  • ~/.pgpass имеет необходимые учетные данные

  • Если копировать содержимое этого скрипта в новый файл, и я запускаю этот файл, все работает как положено.

3 ответа3

1

Я бы использовал diff и cat -v filename чтобы увидеть разницу между рабочим и нерабочим скриптами. Предполагая, что второй "postgres" - это пароль, может быть что-то невидимое, что мешает его распознаванию - например, конец строки control-M (CR) Windows используется на машине * Nix.

0

Убедитесь, что в созданном файле сценария оболочки установлен бит выполнения, прежде чем запускать его.

0

с информацией из postgres wiki и psql --help я предлагаю вам ввести свое имя пользователя в файл .pgpass и запустить в скрипте следующее:

export PGPASSFILE=$HOME/.pgpass
psql -w -f db/pgsql/schema/schema.sql $DATABASE_NAME 

PS: вы запускаете только что скопированный файл, используя его или запустив как бинарный файл? то есть:

. newfile 

ИЛИ ЖЕ

./newfile

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .