누르는 입력이 필요하지 않습니다
길지만 재사용 가능한 모듈 식 접근 방식은 다음과 같습니다.
0
= yes와 1
= no를 반환
- 누르기 엔터 필요 없음-단일 문자 만
- 를 눌러 enter기본 선택을 수락 할 수 있습니다
- 선택을 강제하기 위해 기본 선택을 비활성화 할 수 있습니다
zsh
와 모두 에 적용 bash
됩니다.
Enter 키를 누를 때 기본값은 "no"입니다
(가) 있습니다 N
capitalsed된다. 여기에서 enter를 누르면 기본값이 적용됩니다.
$ confirm "Show dangerous command" && echo "rm *"
Show dangerous command [y/N]?
또한 [y/N]?
자동으로 추가되었습니다. 기본 "no"가 허용되므로 아무 것도 에코되지 않습니다.
유효한 응답이 제공 될 때까지 다시 프롬프트하십시오.
$ confirm "Show dangerous command" && echo "rm *"
Show dangerous command [y/N]? X
Show dangerous command [y/N]? y
rm *
Enter 키를 누를 때 기본값은 "yes"입니다
(가) 있습니다 Y
대문자입니다 :
$ confirm_yes "Show dangerous command" && echo "rm *"
Show dangerous command [Y/n]?
rm *
위의 Enter 키를 누르면 명령이 실행되었습니다.
기본값 없음 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
: "거의 모든 목적을 위해, 별칭보다 쉘 기능이 선호됩니다."