heredoc prompts não transmitidos

3

Estou tentando automatizar a criação de um usuário do PostgreSQL com um script bash.

Estou especificando a senha inicial, conforme solicitado pelo comando "createuser", e gostaria de fazê-lo no bash, o que, na minha opinião, implica um documento aqui.

No entanto, as respostas prontas que eu especifiquei não são enviadas para o comando "createuser"! Aqui está entrando diretamente no script na linha de comando:

-bash-4.1$ createuser mynewuser -P <<ENDBEFORETHIS
> fakepassword
> fakepassword
> n
> n
> n
> ENDBEFORETHIS
Enter password for new role: 
-bash-4.1$ 

Por que isso?

  • Como posso obter a entrada para o script createuser?
  • existe uma maneira mais eficaz de fazer isso?

Para aqueles que acabam de se juntar a nós, o "< <" é conhecido como um aqui-documento ou um "heredoc", que essencialmente canaliza as próximas linhas para o comando como stdin. Funciona até o rótulo correspondente especificado após "< <".

    
por MonkeyWidget 21.12.2012 / 02:21

3 respostas

1

O prompt de senha pode ser evitado emitindo diretamente o comando CREATE USER SQL, que é o que o comando createuser faria, afinal.

~$ psql << EODOC
>create user foo password 'bar';
>EODOC
CREATE ROLE
~$
    
por 28.12.2012 / 13:04
2

Is there a more effective way of doing this?

Você provavelmente deve procurar usar expect(1) .

    
por 21.12.2012 / 02:36
1

Por razões de segurança, senhas não serão aceitas através de stdin. usar o expect irá ajudá-lo nisso.

    
por 21.12.2012 / 11:37