コマンドプロンプトにexit
コマンドを入力するたびに、確認メッセージを表示しようとしています。これを行うために、.bashrc
ファイルで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
シェルがzsh
またはbash
の場合(ただし、sh
モードではありません)、exit
を関数にします。関数は、exit
またはzsh
(POSIXシェルではありません)のシェルビルトイン(bash
のような特別なものでも)よりも優先されます。したがって、関数の名前をexit
に変更し、代わりに関数内でcommand exit
を使用してください。そうでなければ、もちろん、無限の再帰がありました。
オーバーロード関数exit()
は^D
シナリオに適合しません。それでは、trap
について話しましょう。
else
句は、bashを保持するか、終了シグナルを無視できるものでなければなりません。どうすればいいのかもわかりません。
しかし、今のところ、代わりに、bashを再度開くことができると思います。
else
句を次のように置き換えると、次のようになります。
echo
history -a
bash
そして、プロンプトの終了をキャンセルすると、新しいbashが再び開かれ、古いものと同じように、何も起こらなかったように見えます。
このアプローチには欠陥があります。以前に入力した変数の割り当てが失われます。これに取り組むことができるかもしれません。しかし、あなたがこれでかっこいいなら、これはそれです。
とにかくニーズに合わせてこのコードを変更できます。