bash как убить родительский процесс или выйти из родительского процесса из функции в скрипте модуля bash - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть несколько сценариев:

functions.sh - имеет много определенных функций, включая work () и abort (), это выглядит так:

#!/bin/bash

abort()
{
message=$1
echo  Error: $message ..Aborting >log
exit 7
}

work()
{
cp ./testfile ./test1           #./testfile doesnt exist so non zero status here

if [ $? -eq 0 ];then
        echo "variable_value"
else
        abort "Can not copy"
fi
}

parent.sh - parentскрипт - это основной скрипт, он выглядит так:

#!/bin/sh

. ./functions.sh

value=$(work)
echo "why is this still getting printed"

В основном у меня есть много функций в файле functions.sh, и я использую этот файл в parent.sh, чтобы сделать доступными все функции.Parent может вызывать любую функцию и любую функцию в functions.sh может вызывать abort, после чего выполнение parent должно быть остановлено, но этого не происходит, parent.sh переходит к следующему шагу.Есть ли способ обойти эту проблему?

Я понимаю, что это происходит из-за значения шага назначения = $ (работа).Но есть ли способ прервать выполнение только при вызове функции прерывания в этом случае?

1 Ответ

0 голосов
/ 11 февраля 2019

Я не уверен, что такое поведение следует описывать как «проблему».Как вы заметили, когда вы вызываете work в подоболочке, aborting с работы просто прерывает подоболочку.Это правильное, ожидаемое поведение.К счастью, значение, возвращаемое work в подоболочке, доступно родителю, поэтому вы можете просто ответить на него и написать:

value=$(work) || exit

Если work возвращает ненулевое значение, тогдаскрипт завершится с тем же ненулевым значением.

...