
exit
コマンドプロンプトでコマンドを入力するたびに確認メッセージを表示しようとしています。これを行うには、 trap
in .bashrc
file を使用しようとしましたが、元のコマンドがとにかく実行されるため、trap は解決策ではないようです。これを実現する方法はありますか?
目的を達成できなかった私の bashrc スクリプト コードは次のとおりです。
function _exit() # Function to run upon exit of shell.
{
read -p "${RED}Are you sure? " REPLY
if [[ $REPLY =~ ^[Yy]$ ]]; then
echo -e "${RED}Bye${NC}"
exit 0
else
#I do not know what to do here to not exit
return
fi
}
trap _exit EXIT
答え1
シェルがzsh
またはbash
(モードではないsh
) の場合、exit
関数を作成します。または(POSIX シェルではそうではありませんが)exit
では、関数はシェル組み込み関数 ( のような特殊なものも含む)よりも優先されます。したがって、関数の名前を に変更し、代わりに関数内で を使用します。そうしないと、もちろん無限の再帰が発生します。zsh
bash
exit
command exit
答え2
オーバーロード関数はシナリオexit()
に適合しません^D
。それでは、 について話しましょうtrap
。
あなたのelse
句は、bash を保持するか、終了信号を無視できるものである必要があります。私もそれをどうやって行うのか分かりません。
しかし今のところは、代わりに bash を再度開くこともできると思います。
条項を次のように置き換えた場合else
:
echo
history -a
bash
そして、プロンプトで終了をキャンセルすると、新しい bash が再度開かれ、古いものと同じように、何も起こらなかったように見えます。
この方法には欠点があり、以前に入力した変数の割り当てが失われます。その点は改善できるかもしれません。しかし、これで問題ないのであれば、これで十分です。
いずれにしても、このコードはニーズに合わせて変更できます。