Использование инструмента GNU sed
:
sed -Ee '
$!N
/^[[:blank:]]*([^[:blank:]]{1,})([[:blank:]]|\n)(.*\n){0,1}\1([[:blank:]]|$)/D
s/^[[:blank:]]*//;P;D
' input_file
Пояснение:
$!N
добавить следующую строку в пространство шаблонов, если она не последняя. /^[[:blank:]]*([^[:blank:]]{1,})([[:blank:]]|\n)(.*\n){0,1}\1([[:blank:]]|$)/D
Выход:
puloto_cluster_b_02_sys puloto_cluster_b_generic_cg
puloto_cluster_b_02_temp
puloto_cluster_b_04_sys puloto_cluster_b_generic_cg
puloto_cluster_b_04_temp
puloto_cluster_b_06_sys puloto_cluster_b_generic_cg
puloto_cluster_b_08_sys puloto_cluster_b_generic_cg
puloto_cluster_b_10_sys puloto_cluster_b_generic_cg
Думаю, ты ищешь ловушки:
trap terminate_foo SIGINT
terminate_foo() {
echo "foo terminated"
bar
}
foo() {
while :; do
echo foo
sleep 1
done
}
bar() {
while :; do
echo bar
sleep 1
done
}
foo
Выход:
./foo
foo
foo
foo
^C foo terminated # here ctrl+c pressed
bar
bar
...
Функция foo
выполняется до тех пор, пока не будет нажата Ctrl + C , а затем продолжается выполнение, в данном случае функция bar
.
#! /bin/bash
trap handle_sigint SIGINT
ignore_sigint='no'
handle_sigint () {
if [ 'yes' = "$ignore_sigint" ]; then
echo 'Caught SIGINT: Script continues...'
else
echo 'Caught SIGINT: Script aborts...'
exit 130 # 128+2; SIGINT is 2
fi
}
echo 'running short commands...'
sleep 1
sleep 1
ignore_sigint='yes'
echo 'running long commands...'
sleep 10
ignore_sigint='no'
echo 'End of script.'