プリコミットフックでプリコミットフックをスキップするオプションを実装しようとしています(これはパススルーと見なされ、コミットが行われます)。
プロンプトが空の文字列( "")を読み取ることを除いて、すべてがうまく実行されるため、スイッチがデフォルトの「無効な引数」に切り替わり、無限ループが発生します。
プリコミットがどのように機能するかについて誤解があるため、この動作が発生しているようです。これについて説明し、可能であれば解決策を提案できますか?
while true; do
read -p "Do you want to run pre-commit hook? (N=pass) [Y/N]: " choice
#tried alternative approach, but no success.
#echo "Do you want to run pre-commit hook? (N=pass) [Y/N]: "
#read choice
echo "Debug: response=\"$choice\""
case $choice in
[Yy]* )
echo "Running pre-commit hook...";
break;;
[Nn]* )
echo "Skipping pre-commit hook. This is evaluated as passed.";
exit 0;;
* )
echo "Invalid input. Please enter 'y' or 'n'.";;
esac
done
ベストアンサー1
Gitはインタラクティブ環境でフックを実行しないため、これは予想される動作のようです。
いくつかのクイックGoogle検索が公開されました。この問題、ほぼ同じように見えます。参照を容易にするために許容される回答は、exec < /dev/tty
フックの一部として実行して標準入力を開くことができることを示しています。これは、既存のコマンドの前に実行する必要があるread
ように標準入力から読み取ることができます。