Вам необходимо внести некоторые изменения в ваш скрипт (без особого порядка):
IFS=
перед read
, чтобы избежать удаления ведущих и корявых пробелов. $line
нигде не изменяется, нет необходимости в переменной readLine
. С этими изменениями скрипт становится:
#!/bin/bash
filename="foo.txt"
#While loop to read line by line
while IFS= read -r line; do
#If the line starts with ST then set var to yes.
if [[ $line == qwe* ]] ; then
printline="yes"
# Just t make each line start very clear, remove in use.
echo "----------------------->>"
fi
# If variable is yes, print the line.
if [[ $printline == "yes" ]] ; then
echo "$line"
fi
#If the line starts with ST then set var to no.
if [[ $line == ewq* ]] ; then
printline="no"
# Just to make each line end very clear, remove in use.
echo "----------------------------<<"
fi
done < "$filename"
Который можно сократить так:
#!/bin/bash
filename="foo.txt"
while IFS= read -r line; do
[[ $line == qwe* ]] && printline="yes"
[[ $printline == "yes" ]] && echo "$line"
[[ $line == ewq* ]] && printline="no"
done < "$filename"
Который будет печатать начальную и конечную строки (включительно).
Если нет необходимости печатать их, поменяйте местами начальный и конечный тесты:
#!/bin/bash
filename="foo.txt"
while IFS= read -r line; do
[[ $line == ewq* ]] && printline="no"
[[ $printline == "yes" ]] && echo "$line"
[[ $line == qwe* ]] && printline="yes"
done < "$filename"
Однако, лучше (если у вас bash версии 4.0 или лучше) использовать readarray
и выполнить цикл с элементами массива:
#!/bin/dash
filename="infile"
readarray -t lines < "$filename"
for line in "${lines[@]}"; do
[[ $line == ewq* ]] && printline="no"
[[ $printline == "yes" ]] && echo "$line"
[[ $line == qwe* ]] && printline="yes"
done
Это позволит избежать большинства проблем, связанных с использованием read
.
Конечно, вы можете использовать рекомендуемую (в комментариях; спасибо, @costas) строку sed
, чтобы получить только строки для обработки:
#!/bin/bash
filename="foo.txt"
readarray -t lines <<< "$(sed -n '/^qwe.*/,/^ewq.*/p' "$filename")"
for line in "${lines[@]}"; do
: # Do all your additional processing here, with a clean input.
done
Одна из возможностей - это необходимость изменить строку в файле конфигурации /etc/abrt/abrt-action-save-package-data.conf
ProcessUnpackaged = no
- да
, в противном случае abrtd будет захватывать файлы ядра только из программ
, установленных диспетчером пакетов ( dnf
, apt
или что-то еще) .
Используйте abrt-gui
или abrt-cli
для поиска дампов ядра.
Помимо того, что сказал Меух,как только информация о сбое будет собрана демоном abrt (после его перезапуска, как только вы измените упомянутый файл конфигурации ), вы можете использовать abrt -cli или abrt -gui, чтобы увидеть, где находится эта информация.
# abrt-cli -a ls
id xxxxxxxxxxxxxxxxxx
reason: MYPROGRAM killed by SIGABRT
time: Thu 10 Jan 2019 11:48:07 AM CET
cmdline: ./myExecutable
uid: 1001
Directory: /var/spool/abrt/ccpp-2019-01-10-11:48:07-17559
Run 'abrt-cli report /var/spool/abrt/ccpp-2019-01-10-11:48:07-17559' for creating a case in Red Hat Customer Portal
В указанном каталоге вы найдете файл coredump
.