web-dev-qa-db-fra.com

Comment diviser la sortie awk en plusieurs lignes pour la tuyauterie

Je suis en train de mettre au point un script rapide qui déploie plusieurs machines vagabondes localement à des fins de développement. La partie de la procédure consiste à ajouter la clé ssh aux cases vagrant.

Jusqu'ici, obtenir le chemin des clés ssh est assez facile: vagrant ssh-config | grep IdentityFile | awk '{print $2}'

Cela donne le résultat attendu:

/Users/admin/vms/.vagrant/machines/deploy-node.vagrant/virtualbox/private_key /Users/admin/vms/.vagrant/machines/backend-node.vagrant/virtualbox/private_private/private_key/Users/admin/vms /. vagrant/machines/app-node.vagrant/virtualbox/private_key

Cependant, canaliser le résultat vers ssh-add lève une exception:

ssh_askpass: exec (/ usr/X11R6/bin/ssh-askpass): aucun fichier ou répertoire de ce type

Quand je tape manuellement les commandes une à une, le ssh-add fonctionne correctement: ssh-add /Users/admin/vms/.vagrant/machines/deploy-node.vagrant/virtualbox/private_key

Identité ajoutée ...

Par conséquent, je crois que le problème vient du résultat de awk qui renvoie un bloc de 3 lignes au lieu de 3 fois une ligne au canal.

Cette suspicion peut être confirmée en émettant: vagrant ssh-config | grep IdentityFile | awk '{print $2}' | wc -l qui renvoie 3 lorsque je m'attends à obtenir 3 fois la valeur 1.

quelqu'un pourrait-il savoir comment scinder le résultat de awk pour que le ssh-add fonctionne correctement?

2
E. Jaep

Vous pouvez le faire fonctionner avec la commande awk pour ajouter un caractère de nouvelle ligne (\n) à chaque ligne:

vagrant ssh-config | awk '/IdentityFile/{print $2"\n"}'

Et puis dirigez ceci vers ssh-add.

1
Videonauth