コマンドプロンプトを終了する前に確認する

コマンドプロンプトを終了する前に確認する

exitコマンドプロンプトでコマンドを入力するたびに確認メッセージを表示しようとしています。これを行うには、 trapin .bashrcfile を使用しようとしましたが、元のコマンドがとにかく実行されるため、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では、関数はシェル組み込み関数 ( のような特殊なものも含む)よりも優先されます。したがって、関数の名前を に変更し、代わりに関数内で を使用します。そうしないと、もちろん無限の再帰が発生します。zshbashexitcommand exit

答え2

オーバーロード関数はシナリオexit()に適合しません^D。それでは、 について話しましょうtrap

あなたのelse句は、bash を保持するか、終了信号を無視できるものである必要があります。私もそれをどうやって行うのか分かりません。

しかし今のところは、代わりに bash を再度開くこともできると思います。

条項を次のように置き換えた場合else:

echo
history -a
bash

そして、プロンプトで終了をキャンセルすると、新しい bash が再度開かれ、古いものと同じように、何も起こらなかったように見えます。

この方法には欠点があり、以前に入力した変数の割り当てが失われます。その点は改善できるかもしれません。しかし、これで問題ないのであれば、これで十分です。

いずれにしても、このコードはニーズに合わせて変更できます。

関連情報