1

良い一日、

私は、SVN UP コマンドを実行し、コンソール出力をキャプチャし、テキストに対して後処理を行う、比較的単純な BASH スクリプトを作成しています。

例えば:

#!/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 に答える