【发布时间】:2016-10-03 23:17:17
【问题描述】:
我有一个脚本,可以显示我正在运行的 AWS 上的所有实例:
$/home/scripts/show_instances.sh
i-f66d2de0 running 10.148.17.40
i-fxxdbbe0 running 10.148.20.60
(...)
我想做的是获取第一个 IP,通过管道连接到 ssh 并自动连接到服务器。我试过这个:
$/home/scripts/show_instances.sh | tail -1 | awk '{print $3}' | xargs ssh
但不工作:它连接到服务器,但在我输入的第一个命令(即 ls)之后,终端似乎只是在等待某些事情并且没有任何反应(我在 mac 上连接到 Unix),所以我必须用 ctrl+c 退出实例。有什么建议吗?
【问题讨论】:
-
不确定
xargs在这种情况下是否会向您购买任何东西。如果您的标题确实是您的 Q,那么ssh $(..../show_instances.sh | awk 'NR==1{print $3}') ..other ssh stuff ...(使用 cmd-substitution$(...))应该可以解决您的问题。 (不需要尾巴)。否则,您的 Q 似乎是关于“我如何使用xargs)。祝你好运。 -
通常你可以使用反引号(或
$( ))来获得这个(我不能告诉你反引号是如何工作的,因为它们在 StackOverflow 网站上用于格式化目的)。 -
哇!天才!它现在正在工作!我确实喜欢这样:ssh
/home/scripts/show_instances.sh | tail -1 | awk '{print $3}'谢谢! -
解释得更好,两种方式都有效,就像你说的那样。 ssh(反引号)/home/scripts/show_instances.sh |尾-1 | awk '{print $3}'(反引号)或使用 $(..) ssh "$(/home/scripts/show_instances.sh | tail -1 | awk '{print $3}')" 谢谢!
-
加入 90 年代初并使用
$(... cmds sub );-) .. 如果您使用不支持$(..)的古老系统卡住,反引号是您的备份。另外,请阅读awk内部变量NR,在这种情况下您不需要tail。祝你好运。