首页 > 解决方案 > 奇怪的外壳行为

问题描述

好的。我正在尝试获取一些随机数据并将其翻倍。所以我:

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 中。是什么赋予了?为什么不继续将文件翻倍十次?在这种情况下,数字六有什么特别之处?

标签: bashpipezshkshhyphen

解决方案


您正在读取一个文件并附加到同一个文件的末尾。当文件(相对)较小时,可以在写入任何内容之前一次性读取它,因此这不是问题,并且您可以获得所需的行为。一旦超过一定的大小,数据就会在读取端结束之前写入其中 - 所以读取器也会读取它,导致文件越来越长......


推荐阅读