ошибка automake: неэкранированная левая скобка в регулярном выражении устарела

Нижеприведенная команда убьет процесс, использующий больше всего памяти на компьютере. Это то, что вы искали, или это должен быть процесс пользователя, который использует больше всего памяти (который может быть не самым большим нарушителем и причиной нехватки памяти)?

#!/bin/bash

free=`awk '/^Mem/ {print $3}' <(free -m)`

psout=`ps axo pid,args,pmem,rss,vsz --sort -pmem,-rss,-vsz | head -2`
pid=`echo $psout | cut -d " " -f 6`

if (( $free < 1 )); then

kill -9 $pid

fi;

Edit: Теперь я вижу ваши рассуждения, попытаюсь изменить приведенный выше код.

Edit 2: Поскольку мне не нужно завершать этот проект сегодня, позвольте мне направить вас на правильный путь. Вы можете скачать smem (скрипт на python) по следующему URL: https://www.selenic.com/smem/download/

Запуск от имени root с опцией -u даст вам общее количество памяти, используемой каждым пользователем. Соберите это в массив, отсортируйте по используемой памяти, затем просто добавьте -u к команде ps выше, чтобы убить худшего нарушителя этого пользователя.

4
25.10.2015, 21:16
3 ответа

Я получил эту ошибку только потому, что по ошибке использовал print вместо echo в bash:

print "abcd123" | perl -e 'myscript'  #causes error

Решение было использовать echo, я просто запутал print / echo путем смешивания языков

echo "abcd123" | perl -e 'myscript'  #is fine
printf "abcd123" | perl -e 'myscript'  #is fine too, "printf" not print
0
27.01.2020, 20:53

Это связано с изменением, описанным в "Perl Changes for 5.22" , но предложенное там решение экранирования '{' частоне подходит, в зависимости по предполагаемой логике регулярного выражения.

Это предупреждение появляется, когда регулярное выражение использует конструкцию типа "{,20}", которая исторически в некоторыхДРУГИХреализациях регулярных выражений интерпретировалась как эквивалентная "{0,20}", т.е. серии предыдущего атома от нуля до двадцати раз». Во всех случаях, когда целью является количественная оценка повторения, это нарушается во всех современных версиях Perl, потому что интерпретация '{', за которой следует что-либо, кроме числа, как буквального '{', была явно задокументирована, начиная с версии 5.8. Выход из левой фигурной скобки в случае предполагаемого квантификатора не является исправлением; добавление подразумеваемого нуля.

2
27.01.2020, 20:53

Это было исправлено в 2016 -04 -01 (после automake 1.15, до 1.15.1 ).

Из журнала изменений:

  966 2016-04-01  Paul Eggert  <eggert@cs.ucla.edu>
  967 
  968   automake: port to Perl 5.22 and later
  969 
  970   Without this change, Perl 5.22 complains "Unescaped left brace in
  971   regex is deprecated" and this is planned to become a hard error in
  972   Perl 5.26.  See:
  973   http://search.cpan.org/dist/perl-5.22.0/pod/perldelta.pod#A_literal_%22{%22_should_now_be_escaped_in_a_pattern
  974   * bin/automake.in (substitute_ac_subst_variables): Escape left brace.
2
27.01.2020, 20:53

Теги

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