2016-10-03 114 views
2

我有一个脚本,显示所有在AWS上说我运行的实例:如何将脚本的输出作为参数传递给ssh命令?

$/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。一些建议?

+0

不确定'xargs'是否在这种情况下购买任何东西。如果你的标题真的是你的Q,那么'ssh $(..../show_instances.sh | awk'NR == 1 {print $ 3}')..other ssh stuff ...'(using cmd-substitution'$ (...)')应该可以解决你的问题。 (不需要尾巴)。否则似乎你的Q可能是关于“我怎么使用'xargs')。祝你好运。 – shellter

+0

通常你可以使用反引号(或$()')来获得这个(我不能告诉你反引号是如何工作的,因为它们用于在StackOverflow网站上进行格式化) – Dominique

+1

哇!天才!它现在正在工作!我喜欢这样: ssh'/home/scripts/show_instances.sh | tail -1 | awk'{print $ 3}'' ! 谢谢 –

回答

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 

去年李ne,do:

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

工作!我这样做: ssh“$(/ home/scripts/show_instances.sh | tail -1 | awk'{print $ 3}')” 谢谢! –

+2

@ArthurAccioly检查我的编辑。你不需要'tail',你可以单独使用'awk'来完成。 – heemayl

+0

哇!更好!像这样的权利? ssh“$(/ home/scripts/show_instances.sh | awk'END {print $ NF}')” 我在awk上不太好。为什么NF获得完全的IP? 顺便说一句,与ssh -tt的第二个选项没有工作,我有任何命令后,像“ls”等终端相同的问题。但是,无论如何,我对命令很满意。 –

相关问题