如何将脚本的输出作为参数传递给ssh命令?

时间:2016-10-03 13:00:34

标签: bash unix ssh

我有一个脚本,显示我正在运行的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 退出实例。一些建议?

1 个答案:

答案 0 :(得分:4)

使用命令替换,并在其中运行一次awk以从第一行获取所需的IP,然后执行ssh

ssh "$(/home/scripts/show_instances.sh | awk 'NR==1{print $NF; exit}')"

如果你想坚持管道,并xargs一个,那么分配伪TTY(-t)应该让你进入并以交互方式运行:

/home/scripts/show_instances.sh | awk 'NR==1{print $NF; exit}' | xargs ssh -tt

对于最后一行,请执行:

ssh "$(/home/scripts/show_instances.sh | awk 'END{print $NF}')"
/home/scripts/show_instances.sh | awk 'END{print $NF}' | xargs ssh -tt