Завершить функцию bash, вызванную другой функцией bash, без завершения вызывающей стороны - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть функция bash func_1, которая вызывает func_2. func_2 не завершается, пока не будет сообщено через ^ C. Как я могу прекратить func_2 и затем продолжить выполнение func_1? Вызов func_1 с последующим завершением во время func_2 прекращается func_1. Спасибо!

1 Ответ

1 голос
/ 30 сентября 2019

Предполагая, что обработка в func_2 выполняется с помощью внешней программы (см. Оператор sleep в примере ниже), вы можете использовать 'trap' для захвата ctrl / C (на самом деле SIGINT, согласно комментариям выше от @anishsane)

Обратите внимание, что явное завершение внешнего процесса выполняется путем отправки сигнала этому дочернему элементу.

#! /bin/bash

func_1() {
        echo "In func_1"
        sleep 100 &
        # Save the PID of the external program
        X=$!
        trap 'kill -INT $X' INT
        # Wait for the external program to finish/get killed.
        wait
        echo "resume func_1"
}

func_2() {
        echo "In func_2"
        func_1
        echo "resume func_2"
}

func_2

Если вы можете выполнить приведенный выше сценарий и ввести "ctrl / C", вывод будет:

In func_2
In func_1
^Cresume func_1
resume func_2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...