У меня есть сценарий bash, который читает строки из файла, а затем выполняет некоторую логику с этими строками.
So
while read line;
do
# some stuff
done < "$1"
В теле цикла while я передаю вывод одной команды в tee
. Когда этот вывод очень велик, порядка 100 КБ, следующий вызов чтения строки завершится неудачно, и цикл while завершится до того, как будут прочитаны все строки в файле.
Почему это происходит? Я не эксперт по bash, но похоже, что происходит какое-то переполнение буфера. Если да, то как мне это исправить?
Спасибо д
Изменить: Итак, некоторые пояснения необходимы. $ 1 - это первый аргумент командной строки, передаваемый сценарию bash, который соответствует имени файла. Что я и делаю, так это передаю каждую строку входного файла в качестве параметра другой программе. Я подключаю stdout и stderr этой программы к | tee -a somefile
Программа, которую я использую, нестандартна. В зависимости от строки файла, которую я читаю, вывод этой программы может быть очень большим.
Итак, более подробный пример того, что я делаю:
while read line;
do
setSomeVar1
setSomeVar2
program --output="$setSomeVar1" -options "$line" 2>&1 | tee -a "$setSomeVar2"
done < "$1"
Спасибо,
-D
$1
? Что именно вы делаете в теле цикла? - person chepner   schedule 27.02.2013read
. - person chepner   schedule 27.02.2013| someCommand
считается ли отправкой со стандартного ввода? Спасибо за помощь. - person zdevex   schedule 28.02.2013