非常に簡単に見える問題がありますが、満足のいく解決策が見つかりません。次のように、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
の目的は、Junk
2番目のフィールド以降のすべてのフィールド(例:説明)を受信することです。inFile
stdinの代わりにfd 3で開きます。それ以外の場合、そのnc
ループを呼び出すと次の内容も読み取られます。inFile