Построение ответа mightybyte для тех, кто не знаком с * nix сценариями оболочки, вот рабочий сценарий:
#!/bin/sh
PGPASSFILE=/tmp/pgpasswd$$
touch $PGPASSFILE
chmod 600 $PGPASSFILE
echo "myserver:5432:mydb:jdoe:password" > $PGPASSFILE
export PGPASSFILE
psql mydb
rm $PGPASSFILE
Двойной знак доллара ($$
) в /tmp/pgpasswd$$
в строке 2 добавляет идентификационный номер процесса к имени файла, чтобы этот сценарий можно было запускать более одного раза, даже одновременно, без побочных эффектов.
Обратите внимание на использование команды chmod
в строке 4 - точно так же, как ошибка " не простой файл ", описанная mightybyte , также есть разрешения ""ошибка, если этого не сделать.
В строке 7 вам не нужно будет использовать -h
myserver , -p
myport или -U
jdoe . если вы используете значения по умолчанию ( localhost : 5432 ) и имеете только одного пользователя базы данных. Для нескольких пользователей (но подключение по умолчанию) измените эту строку на
psql mydb jdoe
Не забудьте сделать скрипт исполняемым с
chmod +x runpsql
( или как вы называете файл скрипта )
UPDATE:
Я воспользовался советом RichVel и сделал файл нечитабельным перед тем, как ввел в него пароль. Это закрывает небольшую дыру в безопасности.
Спасибо!