1

再会,

我正在编写一个相对简单的 BASH 脚本,它执行 SVN UP 命令,捕获控制台输出,然后对文本进行一些后期处理。

例如:

#!/bin/bash
# A script to alter SVN logs a bit

# Update and get output
echo "Waiting for update command to complete..."
TEST_TEXT=$(svn up --set-depth infinity)
echo "Done"

# Count number of lines in output and report it
NUM_LINES=$(echo $TEST_TEXT | grep -c '.*')
echo "Number of lines in output log: $NUM_LINES"

# Print out only lines containing Makefile
echo $TEST_TEXT | grep Makefile

这可以按预期工作(即:如上面代码中所述),但我担心如果我在一个非常大的存储库上运行它会发生什么。BASH 可以用来保存控制台命令输出的最大缓冲区大小是否有限制?

我一直在寻找类似的问题,但与我正在寻找的东西完全不同。我已经阅读了某些脚本xargs在大型中间缓冲区的情况下如何使用,我想知道在捕获控制台输出方面是否有类似的情况。

例如:

# Might fail if we have a LOT of results
find -iname *.cpp | rm

# Shouldn't fail, regardless of number of results
find -iname *.cpp | xargs rm

谢谢你。

4

2 回答 2

5

使用

var=$(hexdump /dev/urandom | tee out)

bash 没有抱怨;我在超过 1G 和 23.5M 的线路上杀死了它。只要您的输出适合系统的内存,您就不必担心。

于 2012-05-22T17:43:38.790 回答
1

我认为没有理由不在这里使用临时文件。

tmp_file=$(mktemp XXXXX)

svn up --set-depth=infinity > $tmp_file
echo "Done"

# Count number of lines in output and report it
NUM_LINES=$(wc -l $tmp_file)
echo "Number of lines in output log: $NUM_LINES"

# Print out only lines containing Makefile
grep Makefile $tmp_file

rm $tmp_file
于 2012-05-22T18:45:03.383 回答