関数を呼び出して他の関数を呼び出す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