forループで行を分割し、コマンドライン呼び出しの引数として使用する方法

forループで行を分割し、コマンドライン呼び出しの引数として使用する方法

非常に簡単に見える問題がありますが、満足のいく解決策が見つかりません。次のように、IPとポートを含む単純な入力ファイルがあります。

10.155.78.0 445
172.17.11.0 3389

nc -vvv <ip> <port>ここでforループの各行を実行したいと思います。

私が考えることができるのは、cutを使用して線を2回分割することだけです。

for x in $(cat inputfile); do nc -vvv $(echo -n $x | cut -d" " -f1) $(echo -n $x | cut -d" " -f2)

または gawk を使用してサブシェルを起動します。

for x in $(cat dingens); do cmd=$(echo $x | gawk -F" " '{ print "nc -vvv -w 2 " $1 " " $2 }'); echo -n $cmd | bash; done

しかし、両方のソリューションは非常に複雑に見えます。より良い解決策はありませんか?

ベストアンサー1

while IFS=" " read -r Ip Port Junk <&3; do
    nc -vvv "${Ip}" "${Port}" 3<&-
done 3< inFile

の目的は、Junk2番目のフィールド以降のすべてのフィールド(例:説明)を受信することです。inFilestdinの代わりにfd 3で開きます。それ以外の場合、そのncループを呼び出すと次の内容も読み取られます。inFile

おすすめ記事