我的第一个bash脚本有点问题。
目的是制作一个带有x大小的数字的文件,然后制作另一个具有相同基名的文件,并且每次将数字加1直到满足MAXFILES。
filename.something.r0
filename.something.r1
filename.something.r2
filename.something.r3
filename.something.r4
filename.something.r5
filename.something.r6
filename.something.r7
每个文件具有相同的标头,然后充满随机性,直到达到500GB的文件大小...然后继续进行循环的下一个迭代。
#!/usr/bin/env bash
COUNT=0
MAXFILES=8
MAXSIZE=524288000
HEADER=$(cat header)
while [ $COUNT -lt $MAXFILES ]; do
{
FILE="filename.something.r$COUNT"
echo $HEADER > $FILE
FILESIZE=$(stat -c%s $FILE)
while [ $FILESIZE -lt $MAXSIZE ]; do
{
cat /dev/urandom >> $FILE
FILESIZE=$(stat -c%s $FILE)
}
done
((++$COUNT))
echo $COUNT
}
done
将会发生什么:文件继续超过MAXSIZE值,并且直到键盘中断才循环播放。
我不知道为什么它不起作用,并且怀疑它归因于/ dev / urandom不确定地运行。我认为这是标准行为。
原因:我很无聊
我知道这样做有“更好”的方法,但是没有我的工作方式就很烦人。特别是当我将其用作我的第一个bash脚本的项目时。
谢谢
是的,您怀疑是这行给您带来麻烦:
cat /dev/urandom >> $FILE
如果仅从shell提示符运行该命令,您将看到它永远运行。这是因为它/dev/urandom
是一个无休止的特殊文件,只要您从中读取文件,它将为您提供更多数据。
为了使脚本正常工作,您需要从设备文件中读取特定数量的数据,通常是这样完成的dd
:
dd if=/dev/urandom bs=$NBYTES count=1 >> $FILE
其中$NBYTES
一次要读取的字节数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句