Как насчет чего-то как:
sub delay_until_open
{
my( @log_files) = @_;
open( ALL_LOGS, 'tail -0f ' . join( ' ', @log_files) . ' |') || die 'oops, it broke';
while ( <ALL_LOGS>)
{
if ( /OPEN/)
{
last;
}
}
close ALL_LOGS || die 'oops, it broke';
}
Очевидно, обработка ошибок могла использовать некоторую работу, но это должно просканировать все файлы журнала, затем закончить функцию, когда один из них содержит (недавно добавляет), ОТКРЫТЫЙ. Вам не будет нужен сон + цикл проверки вокруг этого.
Кроме того, начиная с "хвост-f" на нескольких файлах отображает имя файла, когда блок прибывает из одного из файлов, Вы могли получить имя файла в regex и возвратить название файла журнала, который просто объявил об "ОТКРЫТОМ". Другой протест, делая это как единственный процесс, вместо 2 конвейеров шага, означает, что можно пропустить некоторые события при обслуживании более ранних событий.
Несоответствия контрольной суммы обычно означают, что восходящий поток изменил tarball, Это типично для Ruby, где devs, кажется, поощряются остаться далекими, далеко от понятия "разработки версий" — какой атрибут мешает мне рекомендовать Ruby в любом виде стабильной промышленной модели.
Я не могу ответить на вопрос MacPorts, но сохранить себя большая проблема и дать RVM попытку. Можно также хотеть изучить Домашнее пиво, которое является хорошо сохраняемой альтернативой MacPorts и Fink.
Оба широко используются сообществом Ruby Mac.