如何将 awk 输出拆分为多行以进行管道传输

如何将 awk 输出拆分为多行以进行管道传输

我目前正在编写一个快速脚本,用于在本地部署多台 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

相关内容