在 Bash 中使用 Expect 设置初始“postgres”用户密码?

在 Bash 中使用 Expect 设置初始“postgres”用户密码?

按照此处的教程:http://www.unixmen.com/install-postgresql-9-4-phppgadmin-ubuntu-14-10/

我正在用 bash 编写 PostgreSQL 的安装脚本,但是在设置初始用户密码时遇到问题。

按照本部分的教程,我们有:

# Login to postgresql prompt:
sudo -u postgres psql postgres

# .. and set postgres password with following command:
postgres=# \password postgres 
Enter new password: 
Enter it again: 
postgres=# \q

这很好,但我想从 Bash 脚本中设置此密码,并且此类任务通常可以使用 Expect 来完成:

# Build the command into a variable so that we can run it later
PSQL_QUERY=$(expect -c "

set timeout 10
spawn -u postgres psql postgres -c '\\\password postgres'

expect \"Enter new password:\"
send \"password\r\"

expect \"Enter it again:\"
send \"password\r\"

expect eof
");
# Run the command with automated entry
echo "$PSQL_QUERY";

但是当我尝试运行脚本时,我得到的输出如下:

root@node:/home/user# ./test.sh 
send: spawn id exp6 not open
    while executing
"send "password\r""
spawn sudo -u postgres psql postgres -c '\password postgres'
psql: FATAL:  Peer authentication failed for user "postgres'"

我不太理解这一点,因为我是 PostgreSQL 的新手,而且当我运行以下命令时:

root@node:/home/user# sudo -u postgres psql postgres -c '\password postgres'
Enter new password: <password>
Enter it again: <password>

成功了。有人能帮我理解我哪里出错了,以及我该如何纠正,以便我可以在 bash 脚本中设置新的“postgres”用户密码吗?提前谢谢!

答案1

更加简单:

sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD '{password}';"

文档psql(PostgreSQL 交互式终端)。

相关内容