あるテキストファイルを別のテキストファイルに「cat」した後、bashスクリプトでエラーが発生しました。

あるテキストファイルを別のテキストファイルに「cat」した後、bashスクリプトでエラーが発生しました。

ping_hostnames.sh私はファイルのIP /ホスト名のリストを繰り返しhostnames.txtpingする非常に簡単なスクリプト()を作成しました。

#!/bin/bash

hostnameCount=`cat hostnames.txt | wc -l`
i=1

while [ $i -le $hostnameCount ]
do
  ping -c 3 $(sed -n ${i}p hostnames.txt)
  i=$(( i+1 ))
done

それからこれを行います。

cat file_with_ip_list.txt >> hostnames.txt

これで、hostnames.txt次のようになります。

192.168.1.0
192.168.1.1
192.168.1.2
192.168.1.3

その後、スクリプト(./ping_hostnames.sh)を実行するとエラーが発生します。

: Name or service not known

file_with_ip_list.txtただし、テキストエディタを使用して手動でデータをコピー/貼り付けるとhostnames.txt正常に動作します。どのタイプ変換が進行中ですかcat

答え1

@steeldriverがコメントでこれに返信しました「見えない」CRLF行の終わりが問題を引き起こし、今知っているので、この問題を解決するために使用できるいくつかの回避策があります。また、私のコードを改善するのに役立つコメントの他の人にも感謝します! BASHの完全初心者ではありませんが、まだ学ぶべきことがたくさんあります!

答え2

これがhostname.txtで機能することを確認してください。おそらく、wc -l行数を1またはそれに近いものに減らしてください。

for f in $(cat hostnames.txt); do ping -c 3 ${f}; done

関連情報