【问题标题】:Weird Shell Behavior奇怪的外壳行为
【发布时间】:2021-10-11 17:26:43
【问题描述】:

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

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

【问题讨论】:

    标签: bash pipe zsh ksh hyphen


    【解决方案1】:

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

    【讨论】:

    • 有没有办法配置读取缓冲区的大小?
    • 没关系。我发现它特定于我用来读取文件的程序。对于pv,它是-B BYTES, --buffer-size BYTES。谢谢指点!
    • @Tripp:一般情况下的最佳选择是复制数据并写入新文件。很高兴您有一个适合您的解决方案!
    猜你喜欢
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-07
    • 2012-10-23
    • 2021-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多