bashスクリプトをテスト/デバッグしていて、コードの1つまたは複数のセクションを過ぎて前方にスキップするだけの場合は、これを実行する非常に簡単な方法を次に示します(ほとんどのメソッドとは異なり)。上記に記載)。
#!/bin/bash
echo "Run this"
cat >/dev/null <<GOTO_1
echo "Don't run this"
GOTO_1
echo "Also run this"
cat >/dev/null <<GOTO_2
echo "Don't run this either"
GOTO_2
echo "Yet more code I want to run"
スクリプトを通常の状態に戻すには、で行を削除しGOTO
ます。
goto
コマンドをエイリアスとして追加することで、このソリューションを偽装することもできます。
#!/bin/bash
shopt -s expand_aliases
alias goto="cat >/dev/null <<"
goto GOTO_1
echo "Don't run this"
GOTO_1
echo "Run this"
goto GOTO_2
echo "Don't run this either"
GOTO_2
echo "All done"
エイリアスは通常bashスクリプトでは機能しないため、それをshopt
修正するコマンドが必要です。
を有効/無効にしたい場合はgoto
、もう少し必要です。
#!/bin/bash
shopt -s expand_aliases
if [ -n "$DEBUG" ] ; then
alias goto="cat >/dev/null <<"
else
alias goto=":"
fi
goto '#GOTO_1'
echo "Don't run this"
#GOTO1
echo "Run this"
goto '#GOTO_2'
echo "Don't run this either"
#GOTO_2
echo "All done"
その後export DEBUG=TRUE
、スクリプトを実行する前に行うことができます。
ラベルはコメントなので、goto
「」を無効にしても構文エラーは発生しません(goto
「:
」にが、これは、goto
ステートメントで。
あらゆる種類のgoto
ソリューションを使用するときは常に、ジャンプするコードが後で依存する変数を設定しないように注意する必要があります。これらの定義をスクリプトの先頭またはそのすぐ上に移動する必要がある場合があります。あなたのgoto
声明の。
goto
bashにはありません(少なくともそれはcommand not found
私に言っています)。どうして?それを行うにはもっと良い方法があるでしょう。