シェルのループ内でSSH

例えば、こんなシェルがあるとします。


#!/bin/sh

while read LINE; do
ssh nekohost ${LINE}
done < hoge.txt

hoge.txtから1行ずつコマンドを読み込んで、nekohost上で実行するというシェルです。

これを実行すると、hoge.txtに複数行コマンドが記述されていても最初の1行しか実行されません。
解決にはsshコマンドに-nオプションをつければOK。
SSHでは対象ホストと標準入出力のやりとりが行われるわけで、それが途切れてしまうとループを抜けてしまいます。これを-nで回避できるわけですね。


#!/bin/sh

while read LINE; do
ssh -n nekohost ${LINE}
done < hoge.txt