web-dev-qa-db-ja.com

パイピングのためにawk出力を複数の行に分割する方法

現在、開発目的のために、複数の浮浪者マシンをローカルに展開する簡単なスクリプトを作成しています。手順の一部は、sagキーをvagrantボックスに追加することです。

これまでのところ、sshキーのパスを取得するのはかなり簡単です:vagrant ssh-config | grep IdentityFile | awk '{print $2}'

予想される出力が得られます。

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

ただし、結果をssh-addにパイプすると例外がスローされます。

ssh_askpass:exec(/ usr/X11R6/bin/ssh-askpass):そのようなファイルまたはディレクトリはありません

コマンドを1つずつ手動で入力すると、ssh-addは正常に機能します:ssh-add /Users/admin/vms/.vagrant/machines/deploy-node.vagrant/virtualbox/private_key

アイデンティティが追加されました...

したがって、問題はawkの結果に起因すると考えられます。この結果は、パイプに1行を3回かけるのではなく、3行のブロックを返します。

この疑いは、次のコマンドを発行することで確認できます。vagrant ssh-config | grep IdentityFile | awk '{print $2}' | wc -lは、1の3倍の値を取得すると予想されるときに3を返します。

誰かがawkの結果を分割してssh-addが正しく機能する方法を知っているでしょうか?

2
E. Jaep

awkの順序付けで動作させると、各行に改行文字(\n)を追加できます。

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

そして、これをssh-addにパイプします。

1
Videonauth