3 votes

Heredoc invites non transmises

Je cherche à automatiser la création d'un utilisateur PostgreSQL avec un script bash.

Je spécifie le mot de passe initial tel que demandé par la commande "createuser", et je voudrais le faire en bash, ce qui selon moi implique un document ici.

Pourtant, les réponses aux invites que j'ai spécifiées n'atteignent pas la commande "createuser" ! Voici comment entrer directement le script sur la ligne de commande :

-bash-4.1$ createuser mynewuser -P < fakepassword
> fakepassword
> n
> n
> n
> ENDBEFORETHIS
Entrez le mot de passe pour le nouveau rôle :
-bash-4.1$ 

Pourquoi est-ce ?

  • Comment puis-je transmettre l'entrée au script createuser ?
  • Y a-t-il un moyen plus efficace de le faire ?

Pour ceux qui nous rejoignent, "<<" est appelé un document ici ou un "heredoc", qui envoie essentiellement les lignes suivantes à la commande en tant que stdin. Il s'exécute jusqu'à l'étiquette correspondante spécifiée après "<<".

2voto

Carl Norum Points 2263

Y a-t-il un moyen plus efficace de faire cela?

Vous devriez probablement envisager d'utiliser expect(1).

1voto

Kannan Mohan Points 428

Pour des raisons de sécurité, les mots de passe ne seront pas acceptés via stdin. l'utilisation de expect vous aidera sur cela.

1voto

Daniel Vérité Points 1485

La demande de mot de passe peut être évitée en émettant directement la commande SQL CREATE USER, ce que la commande createuser ferait finalement de toute façon.

~ $ psql << EODOC
> create user foo password 'bar';
> EODOC
CREATE ROLE
~ $

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X