bash - 奇怪的外壳行为
问题描述
好的。我正在尝试获取一些随机数据并将其翻倍。所以我:
sridhar@ip-10-118-18-248:/scratch$ for each in 1 2 3 4 5 6 7 8 9 10 ; do pv randomtext | cat >> randomtext ; cp randomtext "randomtext-${each}" ; ls -l randomtext* ; done
3.45KiB 0:00:00 [99.2MiB/s] [================================>] 100%
-rw-rw-r-- 1 sridhar sridhar 7070 Aug 6 22:09 randomtext
-rw-rw-r-- 1 sridhar sridhar 7070 Aug 6 22:09 randomtext-1
6.90KiB 0:00:00 [ 269MiB/s] [================================>] 100%
-rw-rw-r-- 1 sridhar sridhar 14140 Aug 6 22:09 randomtext
-rw-rw-r-- 1 sridhar sridhar 7070 Aug 6 22:09 randomtext-1
-rw-rw-r-- 1 sridhar sridhar 14140 Aug 6 22:09 randomtext-2
13.8KiB 0:00:00 [ 408MiB/s] [================================>] 100%
-rw-rw-r-- 1 sridhar sridhar 28280 Aug 6 22:09 randomtext
-rw-rw-r-- 1 sridhar sridhar 7070 Aug 6 22:09 randomtext-1
-rw-rw-r-- 1 sridhar sridhar 14140 Aug 6 22:09 randomtext-2
-rw-rw-r-- 1 sridhar sridhar 28280 Aug 6 22:09 randomtext-3
27.6KiB 0:00:00 [ 674MiB/s] [================================>] 100%
-rw-rw-r-- 1 sridhar sridhar 56560 Aug 6 22:09 randomtext
-rw-rw-r-- 1 sridhar sridhar 7070 Aug 6 22:09 randomtext-1
-rw-rw-r-- 1 sridhar sridhar 14140 Aug 6 22:09 randomtext-2
-rw-rw-r-- 1 sridhar sridhar 28280 Aug 6 22:09 randomtext-3
-rw-rw-r-- 1 sridhar sridhar 56560 Aug 6 22:09 randomtext-4
55.2KiB 0:00:00 [ 709MiB/s] [================================>] 100%
-rw-rw-r-- 1 sridhar sridhar 113120 Aug 6 22:09 randomtext
-rw-rw-r-- 1 sridhar sridhar 7070 Aug 6 22:09 randomtext-1
-rw-rw-r-- 1 sridhar sridhar 14140 Aug 6 22:09 randomtext-2
-rw-rw-r-- 1 sridhar sridhar 28280 Aug 6 22:09 randomtext-3
-rw-rw-r-- 1 sridhar sridhar 56560 Aug 6 22:09 randomtext-4
-rw-rw-r-- 1 sridhar sridhar 113120 Aug 6 22:09 randomtext-5
110KiB 0:00:00 [ 989MiB/s] [================================>] 100%
-rw-rw-r-- 1 sridhar sridhar 226240 Aug 6 22:09 randomtext
-rw-rw-r-- 1 sridhar sridhar 7070 Aug 6 22:09 randomtext-1
-rw-rw-r-- 1 sridhar sridhar 14140 Aug 6 22:09 randomtext-2
-rw-rw-r-- 1 sridhar sridhar 28280 Aug 6 22:09 randomtext-3
-rw-rw-r-- 1 sridhar sridhar 56560 Aug 6 22:09 randomtext-4
-rw-rw-r-- 1 sridhar sridhar 113120 Aug 6 22:09 randomtext-5
-rw-rw-r-- 1 sridhar sridhar 226240 Aug 6 22:09 randomtext-6
24.7GiB 0:00:18 [1.15GiB/s] [==============================] 100000% ETA 0:00:00
^C
sridhar@ip-10-118-18-248:/scratch$
那么......为什么它在六次迭代中表现完全正常,然后突然,在第七次迭代中,它开始比赛了?同样的行为也发生在 bash、dash、ksh 和 zsh 中。是什么赋予了?为什么不继续将文件翻倍十次?在这种情况下,数字六有什么特别之处?
解决方案
您正在读取一个文件并附加到同一个文件的末尾。当文件(相对)较小时,可以在写入任何内容之前一次性读取它,因此这不是问题,并且您可以获得所需的行为。一旦超过一定的大小,数据就会在读取端结束之前写入其中 - 所以读取器也会读取它,导致文件越来越长......
推荐阅读
- java - VS 中的发布模式和调试模式
- reactjs - 通过 react-helmet 添加脚本标签时如何忽略 TypeScript 错误?
- javascript - 正则表达式检查具有最小值和最大值的总位数
- yii2 - 使用 Cloudflare 背后的 Yii2 访问规则来限制 ips 的操作
- laravel - 分组后计数错误
- xml - MS Access xml删除父子关系中的外键
- python - .add_subplot(nrows, ncols, index) 如何工作?
- c# - ExcelReaderFactory 和剃须刀页面使用 excelReader 验证文件是否正确
- html - 引导轮播图像和大小
- c# - 有什么方法可以创建跨度
或内存 指的是 List 的元素 在 C# 中?