2016-10-03 13 views
2

私が実行しているAWS上のすべてのインスタンスを表示するスクリプトを持っている:スクリプトの出力を引数としてsshコマンドに渡すには?

$/home/scripts/show_instances.sh 
i-f66d2de0 running 10.148.17.40 
i-fxxdbbe0 running 10.148.20.60 
(...) 

私が何をしたいのですが、何がSSHと自動的にサーバーに接続するための最初のIP、パイプを取ることです。私はこの試みた:

$/home/scripts/show_instances.sh | tail -1 | awk '{print $3}' | xargs ssh 

をしかし、働いていない。それは、サーバーに接続するが、私は(つまりLS)を入力し、最初のコマンドの後に、端末はちょうど何かを待っているように見えると何も起こりません(私はUNIXに接続しているMacの場合)、ctrl + cでインスタンスを終了する必要があります。いくつかの提案?

+0

この場合、「xargs」があなたに何かを購入しているかどうかはわかりません。あなたの見出しが本当にあなたのQなら、 'ssh $(..../show_instances.sh | awk 'NR == 1 {print $ 3}')..他のssh stuff ...'(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 1 、その後、擬似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 
+0

Worked!私はこれが好きでした: 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を取得するのですか? btw、ssh -ttの2番目のオプションが機能せず、 "ls"のようなコマンドの後に何か待っているのと同じ問題がありました。しかし、とにかく、私はその命令にとても満足しています。 –

関連する問題