[解決済み] bashスクリプトでユーザーに確認のプロンプトを出すには?重複
質問
潜在的に危険なbashスクリプトの先頭に、確認のためのクイック"are you sure?"プロンプトを表示したいのですが、最も簡単で最善の方法は何でしょうか。
どのように解決するのですか?
read -p "Are you sure? " -n 1 -r
echo # (optional) move to a new line
if [[ $REPLY =~ ^[Yy]$ ]]
then
# do dangerous stuff
fi
組み込んだ
levislevis85
の提案 (ありがとうございます!) を受け、さらに
-n
オプションに
read
を押さなくても1文字受け取れるように
入力
. これらのどちらか一方、または両方を使用することができます。
また、否定形は次のようになることもあります。
read -p "Are you sure? " -n 1 -r
echo # (optional) move to a new line
if [[ ! $REPLY =~ ^[Yy]$ ]]
then
[[ "$0" = "$BASH_SOURCE" ]] && exit 1 || return 1 # handle exits from shell or function but don't exit interactive shell
fi
しかし、Erichが指摘したように、間違ったシェルで実行されたスクリプトによる構文エラーなどの状況下では、否定されたフォームによってスクリプトが "危険なもの" に進むことができる可能性があります。失敗モードは最も安全な結果を優先すべきなので、最初の、否定されない
if
を使用する必要があります。
説明
は
read
コマンドはプロンプトを出力します (
-p "prompt"
) の後、一文字を受け入れる (
-n 1
)、バックスラッシュを文字通りに受け取ります(
-r
) (そうでない場合は
read
はバックスラッシュをエスケープとみなし、2文字目を待つことになります)。のデフォルト変数は
read
で、結果を格納するのは
$REPLY
というように、名前を指定しない場合は
read -p "my prompt" -n 1 -r my_var
は
if
文は、正規表現を使用して、文字が
$REPLY
に一致する (
=~
) 大文字または小文字の "Y" です。ここで使われている正規表現は、quot; a string starting (
^
) で、括弧式に含まれる文字のリストのうちの1つだけで構成されている (
[Yy]
)で終わり、(
$
)"です。アンカー(
^
と
$
) は、長い文字列にマッチングしないようにします。この場合、これらは
read
コマンドを使用します。
否定形は、論理演算子 "not" を使用します (
!
) にマッチします。
=~
) "Y" または "y" でない任意の文字。これを表現する別の方法は、可読性が低く、この例では私の意見では、意図を明確に表現していません。しかし、このような形になります。
if [[ $REPLY =~ ^[^Yy]$ ]]
関連
-
[解決済み] Bashスクリプトで引数を反復処理する方法
-
[解決済み] "[0: コマンドが見つかりません]" in Bash [重複].
-
[解決済み] Bashスクリプトのソースディレクトリをスクリプト自体から取得するにはどうすればよいですか?
-
[解決済み] Bashシェルスクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashで通常のファイルが存在しないかどうかを判断する方法を教えてください。
-
[解決済み] Bashで文字列変数を連結する方法
-
[解決済み] Bashで文字列が部分文字列を含むかどうかをチェックする方法
-
[解決済み] Bashスクリプトからプログラムが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashで文字列をデリミターで分割するには?
-
[解決済み] LinuxのシェルスクリプトでYes/No/Cancelの入力を促すにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] MacOSのbashターミナルでexport PS1="\u[\033[m]@[\033[32m]\h:\[\033[33;1m]\w[\033[m]\$" は何を意味していますか?
-
[解決済み] ファイルに書き込むが、ファイルが存在する場合は上書きする
-
[解決済み] bashの文字列の等値性テストで、予期しない演算子エラーが発生するのはなぜですか?重複
-
[解決済み] zip警告 - 名前が一致しない
-
[解決済み] Bashを使ってプログレスインジケータを表示する [重複]。
-
[解決済み] bashで::演算子は何をするのですか?
-
[解決済み] ターミナルでbashスクリプトを実行するにはどうすればよいですか?
-
[解決済み] Bashスクリプトの'''抜け'''がある] [クローズド]
-
[解決済み] LinuxのシェルスクリプトでYes/No/Cancelの入力を促すにはどうしたらいいですか?
-
[解決済み】Bashで、任意のコマンドやエイリアスに「Are you sure [Y/n]」を追加するには?