![如何将 awk 输出拆分为多行以进行管道传输](https://linux22.com/image/1010031/%E5%A6%82%E4%BD%95%E5%B0%86%20awk%20%E8%BE%93%E5%87%BA%E6%8B%86%E5%88%86%E4%B8%BA%E5%A4%9A%E8%A1%8C%E4%BB%A5%E8%BF%9B%E8%A1%8C%E7%AE%A1%E9%81%93%E4%BC%A0%E8%BE%93.png)
我目前正在编写一个快速脚本,用于在本地部署多台 vagrant 机器以用于开发目的。该过程的一部分包括将 ssh 密钥添加到 vagrant 框中。
到目前为止,获取 ssh 密钥的路径相当容易:
vagrant ssh-config | grep IdentityFile | awk '{print $2}'
它给出了预期的输出:
/用户/管理员/vms/.vagrant/machines/deploy-node.vagrant/virtualbox/private_key /用户/管理员/vms/.vagrant/machines/backend-node.vagrant/virtualbox/private_key /用户/管理员/vms/.vagrant/machines/app-node.vagrant/virtualbox/private_key
但是,通过管道传输结果会ssh-add
引发异常:
ssh_askpass:exec(/usr/X11R6/bin/ssh-askpass):没有此文件或目录
当我手动逐个输入命令时,一切ssh-add
正常:
ssh-add /Users/admin/vms/.vagrant/machines/deploy-node.vagrant/virtualbox/private_key
已添加身份...
因此,我相信问题来自于awk
向管道返回 3 行块而不是每行 3 次的结果。
可以通过发出以下命令来确认此怀疑:
vagrant ssh-config | grep IdentityFile | awk '{print $2}' | wc -l
当我期望获得 1 的 3 倍时,它返回 3。
有人知道如何分割结果以awk
使其ssh-add
正常工作吗?
答案1
您可以按顺序在每一行awk
添加一个换行符 ( ):\n
vagrant ssh-config | awk '/IdentityFile/{print $2"\n"}'
然后将其通过管道传输到ssh-add
。