Выполнение следующей команды /скрипта, после того как текущая была ^ C

Я не могу найти ответ на свою проблему. Мне нужно иметь возможность выполнить команду оболочки /скрипт bash после того, как текущий был завершен с помощью ^ C.

Другими словами: У меня есть скрипт, который выполняется, и сразу после того, как я ^ C, я хочу запустить сразу после этого другой скрипт или команду. Как этого добиться?

Я попытался ./first.sh; echo something, но безуспешно.

Я мог бы попытаться запустить одновременные сценарии, где один будет ждать /слушать, пока другой не закончит, а затем выполнить команды очистки и также выйти. Но тогда мне нужен способ запуска их одной командой.

Каков наиболее подходящий подход к этой проблеме?

Спасибо

РЕДАКТИРОВАТЬ: Я думаю, что у меня это есть ... Из первого скрипта я могу запустить другой с & в конце, так что идет к фону. Кажется, работает с ^ C выход из первого (второй непрерывный, чтобы работать). Есть предложения по лучшим решениям?

4 голоса | спросил user1444046 29 PM00000010000003031 2012, 13:50:30

3 ответа


0

./script1.sh && ./script2 т.е. выполнить 2-е, если 1-е успешно.

./script1.sh || ./script2, т.е. выполнить 2-е, если 1-е не удалось.

или в script1 вы можете перехватить сигнал выхода и запустить второй процесс. Примерно так:

s1

#!/bin/bash

trap "./s2.sh" SIGINT

echo "hello"
sleep 100

s2

#!/bin/bash

echo "goodby"

сессии:

$ ./s1.sh 
hello
^Cgoodby
ответил Fredrik Pihl 29 PM00000010000001131 2012, 13:59:11
0

Тебе нужны вещи:

  1. Вам нужно перехватить sigint (ctrl-c), чтобы сценарий не был завершен при нажатии ctrl-c
  2. После того, как команда была завершена, вам нужно проверить причину, по которой она была выполнена. Если команда была прервана с помощью SIGINT (сигнал 2), код выхода этой команды будет 130 (128 + 2).

Вы делаете это так:

trap "echo ctrl c was pressed" SIGINT
sleep 100
[ "$?" = 130 ] && echo "you've interrupted the previous command with ctrl-c"

Пример:

$ bash 1.sh
^Cctrl c was pressed
you've interrupted the previous command with ctrl-c
ответил Igor Chubin 29 PM00000010000004331 2012, 13:58:43
0

Руководство по Bash для начинающих Глава 12. Захват сигналов

  
    

Вот очень простой пример, когда пользователь получает Ctrl + C после     какое сообщение печатается. При попытке убить эту программу без     с указанием сигнала KILL ничего не произойдет:

  
#!/bin/bash
# traptest.sh

trap "echo Booh!" SIGINT SIGTERM
echo "pid is $$"

while :           # This is the same as "while true".
do
        sleep 60  # This script is not really doing anything.
done
ответил hostmaster 29 PM00000020000005931 2012, 14:08:59

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132