Bash で、コマンドまたはエイリアスに「よろしいですか [Y/n]」を追加するにはどうすればよいでしょうか? 質問する

Bash で、コマンドまたはエイリアスに「よろしいですか [Y/n]」を追加するにはどうすればよいでしょうか? 質問する

この特定のケースでは、Bashで確認を追加したいのですが、

本当によろしいですか?[Y/n]

Mercurial の は、実際にはエイリアスです。これを実現するためにエイリアスに追加できる標準コマンドはありますか?hg push ssh://[email protected]//somepath/morepath

その理由は、hg pushと はhg out似た発音になることがあり、 と入力したいときにhgoutrepo、誤って と入力してしまうことがあるからですhgpushrepo(どちらもエイリアスです)。

更新:別のコマンドを備えた組み込みコマンドのようなものにできれば、たとえば、またはを要求して、 の場合は残りの処理を続行できるconfirm && hg push ssh://...コマンドであれば、すばらしいと思います。yesnoyes

ベストアンサー1

これらはよりコンパクトで多用途な形態であるハミッシュの答え大文字と小文字の任意の組み合わせを処理できます。

read -r -p "Are you sure? [y/N] " response
case "$response" in
    [yY][eE][sS]|[yY]) 
        do_something
        ;;
    *)
        do_something_else
        ;;
esac

または、Bash >= バージョン 3.2 の場合:

read -r -p "Are you sure? [y/N] " response
if [[ "$response" =~ ^([yY][eE][sS]|[yY])$ ]]
then
    do_something
else
    do_something_else
fi

注:$responseが空の文字列の場合、エラーが発生します。修正するには、引用符を追加します: . – 文字列を含む変数では常に二重引用符を使用します (例:代わりに"$response"を使用することをお勧めします)。"$@"$@

または、Bash 4.x:

read -r -p "Are you sure? [y/N] " response
response=${response,,}    # tolower
if [[ "$response" =~ ^(yes|y)$ ]]
...

編集:

あなたの編集に応じて、confirm私の回答の最初のバージョンに基づいてコマンドを作成して使用する方法を次に示します (他の 2 つでも同様に機能します)。

confirm() {
    # call with a prompt string or use a default
    read -r -p "${1:-Are you sure? [y/N]} " response
    case "$response" in
        [yY][eE][sS]|[yY]) 
            true
            ;;
        *)
            false
            ;;
    esac
}

この機能を使用するには:

confirm && hg push ssh://..

または

confirm "Would you really like to do a push?" && hg push ssh://..

おすすめ記事