2

case ステートメントで中止された実行を再開する bash スクリプトがあります。CentOS 6 の Bash 4 では問題なく動作しますが、Bash 3.2 のため、CentOS 5 では動作しません。

以下をより「移植可能な」ものに置き換えるために使用できるプログラミングロジックはありますか?

last-action=$(cat /tmp/last-action)

case last-action in)
    beginning)
    function1
    ;&
    middle)
    function2
    ;&
    end)
    function3
    ;&
esac

問題は、タスクの実行が停止した場所で再開し、その後に続くすべてを実行する必要があるということです。たとえば、last-action=middle実行function2してからfunction3. そこで頼りになったのがオペレーター;&です。

if多くのステートメントなしでこれを行う手がかりはありますか?

4

1 に答える 1

2

フォールスルーが非常に便利であることは理解していますが、例のスニペットを考えると、方法がわかりません

case "${last_action}" in
        beginning)
                function1
                function2
                function3
                ;;
        middle)
                function2
                function3
                ;;
        end)
                function3
                ;;
esac

コードに多くのオーバーヘッドが追加されます。それでもたくさんのifsよりもきれいです。

ただし、スイッチがより複雑で、これをより動的にしたい場合は、次の行に沿って何かを行うことができます。

#!/bin/bash

function1() { echo 1; }
function2() { echo 2; }
function3() { echo 3; }

last_action=$1

actions_beginning="function1 function2 function3"
actions_middle="function2 function3"
actions_end="function3"

_actions="actions_${last_action}"
for action in ${!_actions}; do
        "${action}"
done

 

$ ./test.sh beginning
1
2
3
$ ./test.sh middle
2
3
$ ./test.sh end
3

編集:githubであなたのコードを見ただけで、私自身は間違いなくこのルートに行きます。

于 2013-08-01T11:48:05.973 に答える