Использование bash для регулярного выражения на выходе функции для оценки другой функции с использованием найденных групп регулярных выражений

Это оказалось ошибкой gmake 3.81. Когда я запускал команду компиляции напрямую без make, она могла использовать гораздо больше памяти. Кажется, в 3.80 была известная ошибка:Что-то вроде этого . Этот баг должен был быть исправлен в 3.81. но я получил очень похожую ошибку.

Итак, я попробовал gmake 3.82. Компиляция продолжилась, и я больше не видел ошибки виртуальной машины.

Мне так и не удалось заставить его сделать дамп ядра, поэтому я на самом деле не знаю, на что не хватило виртуальной памяти, на gmake, g++ или as. Это просто не сбрасывало бы ядро ​​​​при этой ошибке. Я также не знаю, в чем на самом деле была ошибка, но, похоже, теперь она работает.

0
02.07.2021, 11:46
1 ответ

Я бы не стал писать это на bash или любом диалекте sh (по причинам, уже упомянутым в комментариях ), но похоже, что вы пытаетесь извлечь числовые значения из вывода одной функции и передать их два одновременно ко второй функции?

Если это так, вы могли бы сделать что-то вроде этого:

re='([0-9-]+\.[0-9-]+).*Peak usage: ([0-9-]+) megabytes\.'
while read -r a b ; do
  FUNCTION_B "$a" "$b"
done < <(FUNCTION_A | sed -nE "s/$re/\1 \2/p")

Я не совсем уверен, что доверяю этому, хотя -слишком легко для того, что находится в $re, сломать скрипт sed. Было бы лучше передать $re в awk с помощью опции awk -vили либо в awk, либо в perl в качестве экспортируемой переменной среды.

напр.

export re='([0-9-]+\.[0-9-]+).*Peak usage: ([0-9-]+) megabytes\.'
while read -r a b ; do
  FUNCTION_B "$a" "$b"
done < <(FUNCTION_A | perl -n -e 'print "$1 $2\n" if m/$ENV{re}/')

Тем не менее, я настоятельно рекомендую вам потратить некоторое время на изучение awkи/или perl. sedи grep.

0
28.07.2021, 11:20

Теги

Похожие вопросы