0

シェルスクリプト(BASH)内で「while」ループを使用して、ファイルの行を(1つずつ)読み取ります-「幸いなことに」、ファイルに行が含まれている回数が機能しません。

概要は次のとおりです。 $ cat inputfile.txt

1
2
3
4
5

さて、シェル スクリプトの内容は以下に示すように非常に単純です。

#!/bin/bash

while read line 
do
 echo $line ----------; 
done < inputfile.txt;

上記のスクリプト コードは正常に動作します..... :)。inputfile.txt の 5 行すべてが表示されます。



今、コードが次のような別のスクリプトがあります。

#!/bin/bash

while read line 
do
 echo $line ----------;

 somevariable="$(ssh sshuser@sshserver "hostname")";
 echo $somevariable;
 
done < inputfile.txt;

さて、このスクリプトでは、while ループは "1 ----------" 行のみを表示し、"$somevariable" の有効な値を表示した後、ループを終了します。

私がここで見逃しているものは何か。私はいくつかの数値 N < inputfile.txt を使用して、done <&N の方法を使用しようとはしませんでした (つまり、N 記述子が指すファイルを使用して入力リダイレクターを変更する) ....しかし、なぜこの単純なスクリプトがそうでないのか不思議ですN号で働いています。子シェルで「ssh」操作を実行する単純な変数宣言を追加したときのことです。

ありがとう。

4

1 に答える 1

4

-nこのオプションを ssh コマンドに追加することをお勧めします。これにより、inputfile.txt を標準入力として「飲み込む」ことができなくなります。

あるいは、/dev/null から ssh stdin をリダイレクトすることもできます。例:

somevariable="$(ssh sshuser@sshserver "hostname" </dev/null)";
于 2013-05-01T23:42:45.523 に答える