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

関連情報