2016-10-03 112 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」等終端相同的問題。但是,無論如何,我對命令很滿意。 –

相關問題