heredoc 提示未传入

heredoc 提示未传入

我正在尝试使用 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 将帮助您解决这个问题。

相关内容