Как отменить команду внутри скрипта, не выходя из самого скрипта?

Использование инструмента 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

    • Первое поле текущей строки соответствует первому полю следующей строки, затем первая строка удаляется из пространства шаблонов и возвращается к началу сценария sed с усеченным пространством шаблонов.
    • OTW, мы печатаем первую строку, затем вырезаем ее и переходим обратно к началу сценария sed и применяем команды sed к усеченному пространству шаблонов.

Выход:

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
5
23.04.2020, 23:57
2 ответа

Думаю, ты ищешь ловушки:

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.

6
19.03.2021, 02:26
#! /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.'
3
19.03.2021, 02:26

Теги

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