この特定のケースでは、Bashで確認を追加したいのですが、
本当によろしいですか?[Y/n]
Mercurial の は、実際にはエイリアスです。これを実現するためにエイリアスに追加できる標準コマンドはありますか?hg push ssh://[email protected]//somepath/morepath
その理由は、hg push
と はhg out
似た発音になることがあり、 と入力したいときにhgoutrepo
、誤って と入力してしまうことがあるからですhgpushrepo
(どちらもエイリアスです)。
更新:別のコマンドを備えた組み込みコマンドのようなものにできれば、たとえば、またはを要求して、 の場合は残りの処理を続行できるconfirm && hg push ssh://...
コマンドであれば、すばらしいと思います。yes
no
yes
ベストアンサー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://..