함수를 호출하고 다른 함수를 호출하는 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개:
테스트 스크립트.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
function_1
echo "begin: func_1" source "${startdir}/func_2" echo "end: func_1"
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