В настоящий момент существуют различные улучшения, которые можно сделать. Во-первых, и наименее важный, у Вас есть бесполезное использование кошки. То, что намного более важно, - то, что Вы работаете sed
многократно, каждый из которых распечатает весь файл. Я не действительно уверен, с чем Вы делаете grep
, Вы пытаетесь распечатать только те строки, которые содержат определенную переменную?
Так или иначе один способ сделать вещи лучше состоял бы в том, чтобы работать sed
однажды и имеют его, делают все замены. Что-то как:
replace=""
for item in ${!values[@]}
do
## build the sed line
replace="s/${values[$item]}=[^&\t\n]*/${values[$item]}=***/g;$replace"
done
### run the replacement using sed's -i option so it
### changes the original file
eval sed -i \""$replace"\" $apacheLog
Вот сценарий, который генерирует сценарий , который пытается перехватить все сигналы. Сценарий, который он генерирует ( sigcatcher.sh
), выводит имя пойманного сигнала перед завершением.
#!/bin/sh
# generate a shell function for each and every available signal.
/bin/kill -l | tr ' ' '\n' |
while read signal; do
cat <<END_OF_FUNCTION
handle_$signal () {
echo "Caught $signal"
exit
}
trap 'handle_$signal' $signal
END_OF_FUNCTION
done >sigcatcher.sh
echo 'echo "$$"; sleep 600' >>sigcatcher.sh
В моей системе (OpenBSD) / bin / kill -l
генерирует список доступных сигналов в одной строке, поэтому tr
используется, чтобы разбить его.
Сгенерированный скрипт будет выглядеть примерно так:
handle_HUP () {
echo "Caught HUP"
exit
}
trap 'handle_HUP' HUP
handle_INT () {
echo "Caught INT"
exit
}
trap 'handle_INT' INT
(и т. Д.)
И он будет завершен с помощью
echo "$$"; sleep 600
Он выводит свой PID и находится в спящем режиме в течение 10 минут.
Вы запускаете его так:
$ sh ./sigcatcher.sh >sigcatcher.out
Затем вы закрываете окно и проверяете sigcatcher.out
.
Я не запускаю X Windows, но когда я закрываю панель tmux
, в которой выполняется этот сценарий, я получаю сообщение «Caught HUP» в выходном файле.