我的第一个bash脚本有点问题。
目的是使一个文件附加一个大小为x的数字,然后制作另一个具有相同基本名称的文件,每次加一个数字,直到满足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脚本的项目时。
由于
答案 0 :(得分:1)
是的,正如您所怀疑的那样,这条线路正在给您带来麻烦:
cat /dev/urandom >> $FILE
如果你只是从shell提示符中运行它,你会看到它永远运行。这是因为/dev/urandom
是一个没有结束的特殊文件,只要您从中读取它就会为您提供更多数据。
要使您的脚本正常工作,您需要从设备文件中读取特定数量的数据,通常这样做是dd
,如下所示:
dd if=/dev/urandom bs=$NBYTES count=1 >> $FILE
其中$NBYTES
是您希望一次读取的字节数。