PostgreSQL部署脚本停顿

时间:2012-12-05 20:54:52

标签: sql bash postgresql shell debian

我有一个bash shell部署脚本(linode stackscript),它在部署我的debian 6.0服务器时运行。该脚本以root身份运行,脚本如下:

apt-get update
apt-get install postgresql postgresql-contrib pgadmin3

passwd postgres
su - postgres
psql -c "ALTER USER postgres WITH PASSWORD 'changeme'" -d template1
su - postgres
createdb mytestdb
psql mytestdb

我有两个问题:

首先,当我通过shell手动运行每一行时,它可以正常运行,但是当我将它作为stackscript运行时,它会运行 passwd postgres 这一行,但之后没有任何内容。

其次,当我运行 passwd postgres 行时,它会要求我手动输入密码。有什么方法可以把它作为一个变量放在shellscript中吗?

1 个答案:

答案 0 :(得分:2)

passwd旨在以交互方式使用。 批量更改密码的正确命令是chpasswd

示例:

#!/bin/sh
echo 'postgres:newpassword' | chpasswd

另请注意,脚本执行su - postgres的方式看起来不像通常在非交互模式下完成。 更好:su -c 'command1; command2...' - postgres