0

/tmp/a.txt というファイルがあり、その内容を変数で何度も読みたいと思っています。EOF に達した場合は、最初から開始する必要があります。

つまり、ファイルの内容が「abc」で、10 文字を取得したい場合は、「abcabcabca」にする必要があります。

このために、私は明白なスクリプトを書きました:

while [ 1 ]; 
  do cat /tmp/a.txt; 
done | 
for i in {1..3}; 
  do read -N 10 A; 
  echo "For $i: $A"; 
done

唯一の問題は、ハングすることです。なぜそうなるのかわからない!

私は bash の他のソリューションにもオープンです。

4

2 に答える 2

1

行を何度も繰り返すには、次のことができます。

yes "abc" | for i in {1..3}; do read -N 10 A; echo "for $i: $A"; done

yes は「forever」を出力しますが、1..3 の for i は「do ... done;」のみを実行します。パート3回

はい、文字列の後に「\n」を追加します。したくない場合は、次のようにします。

 yes "abc" | tr -d '\n' | for i in {1..3}; do read -N 10 A; echo "for $i: $A"; done

上記のすべてで、読み取りはパイプの後にあるため、bash ではサブシェルにあることに注意してください。そのため、「$A」は「do....done;」でのみ使用できます。エリア、そして迷子になる!

ループしてファイルから読み取るには、サブシェルでは実行しません。

for i in {1..3}; do read -N 10 A ; echo "for $i: $A"; done <$(cat /the/file)

/the/file に十分なデータがあることを確認するには、次の手順を繰り返します。

for i in {1..3}; do read -N 10 A ; echo "for $i: $A"; done <$(cat /the/file /the/file /the/file)

最新のものをテストするには: echo -n "abc" > /the/file (-n であるため、trainling 改行はありません)

于 2013-01-11T12:11:17.790 に答える