5行のファイルを読み込んでecho出してみると普通にいける
1 2 3 4 5 6 |
[root@CARMAINE ~]# cat readfile | while read LINE ; do echo $LINE ; done aaa bbb ccc ddd eee |
ssh経由でechoしてみると5行読み込んでいるはずが、1行だけ読み込んで抜けてしまっている
1 2 3 |
[root@CARMAINE ~]# cat readfile | while read LINE ; do ssh 192.168.0.47 echo $LINE ; done aaa [root@CARMAINE ~]# |
対処法其の一 「for line in cat readfile
」でよみこむ
1 2 3 4 5 6 |
[root@CARMAINE ~]# for line in `cat readfile` ; do ssh 192.168.0.47 echo $line ; done aaa bbb ccc ddd eee |
対処法其の二 「ssh -n」オプション(バックグラウンド実行)を使う
1 2 3 4 5 6 |
[root@CARMAINE ~]# cat readfile | while read LINE ; do ssh -n 192.168.0.47 echo $LINE ; done aaa bbb ccc ddd eee |
どうやら、sshコマンド実行時に標準入力が切り替わり、ローカルホストからの標準入力を停止し、リモートホストからの標準入力を受け付けるみたい。
while read line実行時は、ループ処理開始前にファイルを読み込み、その中でsshコマンドを実行、その後再びreadコマンドを実行する際にファイルが既に閉じられているからループを抜けてしまうみたい。
参考
http://www.m-bsys.com/error/whileread-ssh