От man bash
:
trap [-lp] [[arg] sigspec ...]
The command arg is to be read and executed when the shell
receives signal(s) sigspec.
Когда Ваша программа segfaults, Ваш удар просто получает a SIGCHLD
потому что некоторый ребенок, из которого выходят (любым способом).
Можно, однако, использовать код выхода, сохраненный в $?
, в некотором условном выражении и прерывании SIGCHLD
:
trap 'if [[ $? -eq 139 ]]; then echo "segfault !"; fi' CHLD
Отметьте это set -bm
мог бы быть необходим, если это (что это, вероятно, делает) используется в неинтерактивном ударе (таком как сценарий).
Править: См. также ответ этих (Жабр) на подобном использовании проблемы bash
и trap
.
Я не имею ack-grep
утилита на моем Mac так будет это awk
работа решения для Вас?
awk -v FS=[?\"] '/param/{print FILENAME; print $3 }' INPUT_FILE
Выполнение:
[jaypal:~/Temp] cat file0
<a href="http://example.com/fnord.layername.html?parameter=FOO-_-BAR-_-FNORD" class="poit">
<img ... />
</a>
[jaypal:~/Temp] awk -v FS=[?\"] '/param/{print FILENAME; print $3 }' file0
file0
parameter=FOO-_-BAR-_-FNORD
Вероятная работа вокруг для Вас:
Если получение имени файла наряду со значениями параметров очень важно, затем можно или выполнить это с простым for loop
или можете быть Вы, может перенаправить вывод, в котором Вы добираетесь в настоящее время до файла или передаете его по каналу к следующему awk
острота.
Простой для цикла:
[jaypal:~/Temp] for i in ./file*.txt; do awk -v FS=[?\"] '/param/{print FILENAME; print $3"\n" }' "$i"; done
./file01.txt
parameter=FOO-_-BAR-_-FNORD
./file02.txt
parameter=POIT-_-NARF-_-BAZINGA
Перенаправление текущей производительности в файл и вызов awk
на нем:
Следование примеру принимает redirection
из Вашей текущей производительности в файл, названный temp.file.
[jaypal:~/Temp] cat temp.file
fileName.txt
1:<a href="http://example.com/fnord.layername.html?parameter=FOO-_-BAR-_-FNORD" class="poit">
fileName2.txt
5:<a href="http://example.com/fnord.layername.html?parameter=POIT-_-NARF-_-BAZINGA" class="poit">
[jaypal:~/Temp] awk -v FS=[?\"] 'NF==1{ print $0 }/param/{ print $3"\n" }' temp.file
fileName.txt
parameter=FOO-_-BAR-_-FNORD
fileName2.txt
parameter=POIT-_-NARF-_-BAZINGA
Я не уверен, что понимаю, и я не знаком с ack-grep утилитой, но почему Вы не пытаетесь сократить из первого вхождения? к "?
Что-то как следующее:
По причине удобочитаемости я поместил тег HTML в переменную
var='<a href="http://example.com/fnord.layername.html?parameter=FOO-_-BAR-_-FNORD" class="poit">'
cut -d '?' -f 2- <(echo $var ) | cut -d '"' -f 1
Можно использовать --output EXPR
аргумент ack-grep для выборочной печати просто части строки. Следует иметь в виду, что ack-grep является сценарием Perl, аргументом EXPR является просто любое выражение Perl; в этом случае я использую круглые скобки в соответствии шаблона для захвата просто части строки от? к закрытию, "(я также использую обратную косую черту для заключения в кавычки regexp метасимвола'?' который Вы не сделали, хотя, возможно, как первый символ в regexp, который, могло бы оказаться, работал бы).
ack-grep -a --output '$1' '\?(parameter=.*?)"'
Отметить последнее? в regexp делает.* нежадное, так, чтобы он соответствовал до первого "а не последнего на строке.
Это генерирует выходные строки как 1:parameter=FOO-_-BAR-_-FNORD
- можно подавить продвижение 1: с -h
аргумент ack-grep.