我正在尝试使用 bash 脚本自动创建 PostgreSQL 用户。
我正在按照“createuser”命令的提示指定初始密码,我想在 bash 中执行此操作,我认为这意味着这里有一个文档。
但是我指定的提示答案并没有进入“createuser”命令!这是直接在命令行中输入脚本:
-bash-4.1$ createuser mynewuser -P <<ENDBEFORETHIS
> fakepassword
> fakepassword
> n
> n
> n
> ENDBEFORETHIS
Enter password for new role:
-bash-4.1$
这是为什么?
- 我如何获取 createuser 脚本的输入?
- 有没有更有效的方法来做到这一点?
对于刚加入我们的人来说,“<<” 被称为 here-document 或“heredoc”,它本质上将接下来的几行作为 stdin 传送到命令。它会一直运行,直到在“<<”后指定的匹配标签。
答案1
可以通过直接发出 SQL 命令来避免密码提示CREATE USER
,无论如何,这都是该createuser
命令最终要执行的操作。
~$ psql << EODOC
>create user foo password 'bar';
>EODOC
CREATE ROLE
~$
答案2
有没有更有效的方法来做到这一点?
你可能应该考虑使用expect(1)
。
答案3
出于安全原因,不会通过 stdin 接受密码。使用 expect 将帮助您解决这个问题。