BASH가 기본 기능으로 돌아갑니다.

BASH가 기본 기능으로 돌아갑니다.

함수를 호출하고 다른 함수를 호출하는 BASH 스크립트가 있습니다.

#!/bin/bash
function foo
{
    function bar
    {
        # do something
    }
    bar
}
foo

bar기본 기능으로 직접 돌아가는 방법은 무엇입니까 ? 상황은 bar사용자 입력이 처리되어 부정적인 답변을 받으면 기본 기능으로 돌아가야 하고, 그렇지 않으면 으로 돌아가야 한다는 것입니다 foo.

회귀는 foo단순한 문장의 문제가 아닙니다 return. 또 다른 경우에는 다음을 시도했습니다(실제로 작동함).

#!/bin/bash
function foo
{
    function bar
    {
        if [negative] # abstract statement
        then return 1
        else return 0
        fi
    }
    ! bar && return
}
foo

foo하지만 프로젝트 전반에 걸쳐 유사한 함수( bar헤더 파일에 정의됨)가 배포되어 있으므로 이를 수정할 수 있는 방법이 있습니까 bar? 프로젝트의 길이는 약 2k 줄이며 여러 파일로 구성되어 있으므로 솔루션이 있으면 훨씬 쉬울 것입니다.

답변1

(내가 아는 한) 이 작업을 수행할 수 있는 좋은 방법은 없지만, 기꺼이 대가를 지불할 의향이 있다면...

코드를 함수에 넣는 대신 소스 파일에 코드를 넣을 수 있습니다. 함수에 매개변수가 필요한 경우 다음을 사용하여 매개변수를 준비해야 합니다 set.

set -- arg1 arg2 arg3
source ...

파일 3개:

  1. 테스트 스크립트.sh

    #! /bin/bash
    
    startdir="$PWD"
    
    echo mainscript
    
    while true; do
            echo "begin: helper loop"
            source "${startdir}/func_1"
            echo "end: helper loop"
            break
    done
    
    echo mainscript
    
  2. function_1

    echo "begin: func_1"
    source "${startdir}/func_2"
    echo "end: func_1"
    
  3. function_2

    echo "begin: func_2"
    echo break from func_2
    break 100
    echo "end: func_2"
    

결과:

> ./testscript.sh
mainscript
begin: helper loop
begin: func_1
begin: func_2
break from func_2
mainscript

관련 정보