私のビルド/配布スクリプトは期待どおりに機能しません。レプリケーションまたはビルドが失敗しても続行され、再起動が呼び出されます。 0を返すからだと思いますが、内部コマンドで結果を返したいのですが、「clone」ではレプリケーションが成功した場合にのみレプリケートされたフォルダに移動したいのですが、どうすれば作成できますか?このスクリプトをどのように改善しますか?
function clone {
git clone /volume1/repos/project.git
cd project
return 0
}
function build {
docker build -t project .
return 0
}
function cleanup {
...
}
function restart {
...
docker run ...
}
trap cleanup EXIT
if clone && build; then
restart
exit 0
else
echo Failed...
exit 1
fi
ベストアンサー1
はい、指摘したように、関数は常にaを返すので、0
常に成功を返します。何があっても。最も簡単な解決策は、関数が何も返さないようにすることです。
function clone {
git clone /volume1/repos/project.git
cd project
}
function build {
docker build -t project .
}
man bash
次に、最後のコマンド実行(から)の終了ステータスを返します。
実行時の関数の終了状態は、関数本体内で実行された最後のコマンドの終了状態です。
もちろん、clone
関数の最後のコマンドはそれで失敗しましたが、成功しても関数はまだ成功を返すというcd
意味です。これを防ぐには、gitコマンドの終了ステータスを変数に保存し、関数にその変数を返すようにします。git clone
cd project
function clone {
git clone /volume1/repos/project.git
out=$?
cd project
return $out
}
またはより良いかもしれません。
function clone {
git clone /volume1/repos/project.git && cd project
}
コマンドを組み合わせてコマンドのいずれかが失敗すると、関数は失敗を返します。