美好的一天,
我正在编写一个相对简单的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
谢谢。
答案 0 :(得分:5)
使用
var=$(hexdump /dev/urandom | tee out)
bash没有抱怨;我有点超过1G和23.5M线杀了它。只要您的输出适合系统的内存,您就不必担心。
答案 1 :(得分: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