だから私はこの本を買った。素数とプログラミング、進行が非常に困難です。今日、私は第1章で説明した(簡単な)プログラムを書いています:
#!/usr/bin/env python
import math
def find_gcd(a,b):
while b > 0:
r = a - b * math.floor(a/b)
a = b
b = r
return int(a)
if __name__ == "__main__":
import random, sys
while True:
print find_gcd(random.randrange(int(sys.argv[1])), random.randrange(int(sys.argv[2])))
…今はこう呼びました。
./gcd-rand.py 10000 10000 > concievablyreallyhugefile
...今、私はbash
非常に大きなファイルが特定のサイズに達すると、1行が壊れるという夢を見ています。私はそれが次のように見えると思います。
while $(du -h f) < 32M; do ./gcd-rand.py 10000 10000 > $f; done
...しかし、私は以前にwhileループを書いたことがなく、bash
構文がどのように機能するのかわかりません。
答え1
秘密は、testコマンドtest
またはそれに対応するコマンドを使用することです[ ... ]
。
while [ "$(du -m f|cut -f1)" -lt 32 ]
do
./gcd-rand.py 10000 10000 > "$f"
done
詳細についてはを参照してくださいhelp test
。
ノート
test
または、[
コマンドはbashです。組み込み。ヘルプ情報はbashで、help test
またはbash内で検索できますhelp [
。シェルに対応するコマンドがない場合に使用されるコマンドをman test
示します。test
組み込みまたは明示的にとして呼び出されます/usr/bin/test
。
答え2
答え3
Pythonコードは永遠に繰り返されます。したがって、バックグラウンドで実行してファイルサイズを超えた場合は終了することをお勧めします。一行で:
{ ./gcd-rand.py 10000 10000 > f & }; p=$!; while (( $(stat -c %s f) < 33554432 )); do sleep .1; done; kill $p
注:Dirkの提案に従って適切な睡眠時間を選択してください。 statに加えてduを使用することもできます。
答え4
ulimit
以下を使用して、シェル(またはその子孫)が生成できるファイルサイズを制限できます。
ulimit -f 32768