web-dev-qa-db-ja.com

コマンドを終了する前に確認してください-プロンプト

コマンドプロンプトに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
4
sowrov

シェルがzshまたはbashの場合(ただし、shモードではありません)、exitを関数にします。関数は、exitまたはzsh(POSIXシェルではありません)のシェルビルトイン(bashのような特別なものでも)よりも優先されます。したがって、関数の名前をexitに変更し、代わりに関数内でcommand exitを使用してください。そうでなければ、もちろん、無限の再帰がありました。

6
Hauke Laging

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

else句は、bashを保持するか、終了シグナルを無視できるものでなければなりません。どうすればいいのかもわかりません。

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

else句を次のように置き換えると、次のようになります。

echo
history -a
bash

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

このアプローチには欠陥があります。以前に入力した変数の割り当てが失われます。これに取り組むことができるかもしれません。しかし、あなたがこれでかっこいいなら、これはそれです。

とにかくニーズに合わせてこのコードを変更できます。

1
z14