改进bash脚本以在循环内回显重定向

时间:2018-01-03 15:33:15

标签: bash

在bash中,我有一段时间完成循环,我回显并将其重定向到一个文件,我做了大约一百万次,所以我希望让它更快。

  1. 如何提高代码效率?
  2. 将tmp目录挂载到RAM会让它更快吗? mount -t tmpfs -o size=512m tmpfs /tmp
  3. while $count<1000000
    do
    echo "test statement redirected into file a million times" >>/tmp/output.txt 
    done
    

1 个答案:

答案 0 :(得分:4)

当重定向在循环内部时,输出文件每次迭代都会打开和关闭。如果你重定向整个循环,它会在循环期间打开,这要快得多。

for ((i = 0; i < 1000000; ++i)); do
    echo "test statement redirected into file a million times"
done > /tmp/output.txt

(另请注意更新的循环逻辑。)

如果你想让它更快,你可以通过将其简化为一个或两个内部循环的命令而不是在shell脚本中循环来加快速度。 yes会一遍又一遍地输出固定的字符串。将其与head组合以控制打印的行数。

yes 'test statement redirected into file a million times' | head -1000000 > /tmp/output.txt
  

将tmp目录挂载到RAM会使它更快吗?

也许,但我不会打扰。对于本地问题,这是一个全系统的变化。如果您不需要磁盘上的文件,则会引发一个问题:您是否首先需要创建该文件?为什么你需要一个重复一百万次的相同行的文件?也许这是一个XY problem。也许您根本不需要该文件。

例如,如果您正在创建它并立即将其传递给单个后续命令,则可以尝试使用进程替换来避免需要临时文件。

yes 'test statement redirected into file a million times' | head -1000000 > /tmp/output.txt
command /tmp/output.txt

变为

command <(yes 'test statement redirected into file a million times' | head -1000000)