কোন টিপুন প্রবেশের প্রয়োজন
এখানে একটি দীর্ঘ, কিন্তু পুনরায় ব্যবহারযোগ্য এবং মডুলার পদ্ধতির:
- প্রত্যাশা
0
= হ্যাঁ এবং 1
= না
- কোনও টিপুন প্রবেশের দরকার নেই - কেবল একটি একক অক্ষর
- enterডিফল্ট পছন্দটি গ্রহণ করতে টিপতে পারেন
- নির্বাচনকে বাধ্য করার জন্য ডিফল্ট পছন্দটি অক্ষম করতে পারে
- উভয়
zsh
এবং জন্য কাজ করে bash
।
এন্টার টিপে "না" এ ডিফল্ট করা হচ্ছে
নোট করুন যে N
মূলধন হয়। ডিফল্ট গ্রহণ করে এন্টার টিপুন:
$ confirm "Show dangerous command" && echo "rm *"
Show dangerous command [y/N]?
এছাড়াও নোট করুন, এটি [y/N]?
স্বয়ংক্রিয়ভাবে সংযোজন করা হয়েছিল। ডিফল্ট "না" স্বীকৃত, তাই কিছুই প্রতিধ্বনিত হয় না।
বৈধ প্রতিক্রিয়া না দেওয়া পর্যন্ত পুনরায় প্রম্পট করুন:
$ confirm "Show dangerous command" && echo "rm *"
Show dangerous command [y/N]? X
Show dangerous command [y/N]? y
rm *
এন্টার টিপে "হ্যাঁ" এ ডিফল্ট করা হচ্ছে
নোট করুন যে Y
মূলধনযুক্ত:
$ confirm_yes "Show dangerous command" && echo "rm *"
Show dangerous command [Y/n]?
rm *
উপরে, আমি সবেমাত্র এন্টার টিপলাম, সুতরাং কমান্ডটি দৌড়ে গেল।
কোনও ডিফল্ট নেই enter- প্রয়োজন y
বাn
$ get_yes_keypress "Here you cannot press enter. Do you like this"
Here you cannot press enter. Do you like this [y/n]? k
Here you cannot press enter. Do you like this [y/n]?
Here you cannot press enter. Do you like this [y/n]? n
$ echo $?
1
এখানে, 1
বা মিথ্যা ফিরিয়ে দেওয়া হয়েছিল। কোনও মূলধন নোট করুন[y/n]?
কোড
# Read a single char from /dev/tty, prompting with "$*"
# Note: pressing enter will return a null string. Perhaps a version terminated with X and then remove it in caller?
# See https://unix.stackexchange.com/a/367880/143394 for dealing with multi-byte, etc.
function get_keypress {
local REPLY IFS=
>/dev/tty printf '%s' "$*"
[[ $ZSH_VERSION ]] && read -rk1 # Use -u0 to read from STDIN
# See https://unix.stackexchange.com/q/383197/143394 regarding '\n' -> ''
[[ $BASH_VERSION ]] && </dev/tty read -rn1
printf '%s' "$REPLY"
}
# Get a y/n from the user, return yes=0, no=1 enter=$2
# Prompt using $1.
# If set, return $2 on pressing enter, useful for cancel or defualting
function get_yes_keypress {
local prompt="${1:-Are you sure} [y/n]? "
local enter_return=$2
local REPLY
# [[ ! $prompt ]] && prompt="[y/n]? "
while REPLY=$(get_keypress "$prompt"); do
[[ $REPLY ]] && printf '\n' # $REPLY blank if user presses enter
case "$REPLY" in
Y|y) return 0;;
N|n) return 1;;
'') [[ $enter_return ]] && return "$enter_return"
esac
done
}
# Credit: http://unix.stackexchange.com/a/14444/143394
# Prompt to confirm, defaulting to NO on <enter>
# Usage: confirm "Dangerous. Are you sure?" && rm *
function confirm {
local prompt="${*:-Are you sure} [y/N]? "
get_yes_keypress "$prompt" 1
}
# Prompt to confirm, defaulting to YES on <enter>
function confirm_yes {
local prompt="${*:-Are you sure} [Y/n]? "
get_yes_keypress "$prompt" 0
}
info bash
: "প্রায় প্রতিটি কাজের জন্য, শেল ফাংশনগুলি এলিয়াসগুলির চেয়ে বেশি পছন্দ করা হয়।"