为了避免显式检查'yes'的这些变体,可以将bash正则表达式运算符'=〜'与正则表达式一起使用:
read -p "Are you sure you want to continue? <y/N> " prompt if [[ $prompt =~ [yY](es)* ]] then (etc...)
测试用户输入是以'y'还是'Y'开头,后跟零或更多'es'。
这可能有点太短,但对于我自己的私人用途,它的效果很好
read -n 1 -p "Push master upstream? [Y/n] " reply; if [ "$reply" != "" ]; then echo; fi if [ "$reply" != "n" ]; then git push upstream master fi
该 read -n 1 只读一个字符。如果它不是小写的'n',则假定它是'Y'。
read -n 1
(至于真正的问题:制作一个bash脚本并将你的别名更改为指向该脚本而不是之前指向的那个)
下面的代码结合了两件事
shopt -s nocasematch将负责不区分大小写
如果条件同时接受输入,则传递yes,Yes,YES,y。
shopt -s nocasematch
如果[[sed-4.2.2。$ LINE =〜(yes | y)$]]
然后退出0
科幻
使用回车可以轻松绕过确认,我发现连续提示输入有效是很有用的。
这是一个简单的功能。如果未收到Y | N,则“无效输入”显示为红色,并再次提示用户。
prompt_confirm() { while true; do read -r -n 1 -p "${1:-Continue?} [y/n]: " REPLY case $REPLY in [yY]) echo ; return 0 ;; [nN]) echo ; return 1 ;; *) printf " \033[31m %s \n\033[0m" "invalid input" esac done } # example usage prompt_confirm "Overwrite File?" || exit 0
您可以通过传递参数来更改默认提示
不一样,但无论如何都有效。
#!/bin/bash i='y' while [ ${i:0:1} != n ] do # Command(s) read -p " Again? Y/n " i [[ ${#i} -eq 0 ]] && i='y' done
输出: 再次?是/否 再次?是的,还有什么 再次?是/否7 再次? Y / n&amp; 再次?是/否nsijf $
现在只检查$ i读取的第一个字符。
这可能是一个黑客:
如此问题 在Unix / Bash中,“xargs -p”是在运行任何命令之前提示确认的好方法吗?
我们可以使用 xargs 做这个工作:
xargs
echo ssh://username@www.example.com//somepath/morepath | xargs -p hg push
当然,这将被设置为别名,就像 hgpushrepo
hgpushrepo
的 例: 强>
$ echo foo | xargs -p ls -l ls -l foo?...y -rw-r--r-- 1 mikelee staff 0 Nov 23 10:38 foo $ echo foo | xargs -p ls -l ls -l foo?...n $
这里大概是你想要的一个片段。 让我找出如何转发论点。
read -p "Are you sure you want to continue? <y/N> " prompt if [[ $prompt == "y" || $prompt == "Y" || $prompt == "yes" || $prompt == "Yes" ]] then # http://stackoverflow.com/questions/1537673/how-do-i-forward-parameters-to-other-command-in-bash-script else exit 0 fi
提防 yes | command name here :)
yes | command name here
游戏的后期,但我创造了另一种变体 confirm 以前答案的功能:
confirm
confirm () { read -r -p "$(echo $@) ? [y/N] " YESNO if [ "$YESNO" != "y" ]; then echo >&2 "Aborting" exit 1 fi CMD="$1" shift while [ -n "$1" ]; do echo -en "$1\0" shift done | xargs -0 "$CMD" || exit $? }
要使用它:
confirm your_command
特征:
错误:
echo -en
bash
echo
这是我使用本地化正则表达式的解决方案。所以在德语中,“j”的“j”也会被解释为是。
第一个参数是问题,如果第二个参数是“y”而不是是默认答案,否则不会是默认答案。如果答案为“是”,则返回值为0;如果答案为“否”,则返回值为1。
function shure(){ if [ $# -gt 1 ] && [[ "$2" =~ ^[yY]*$ ]] ; then arg="[Y/n]" reg=$(locale noexpr) default=(0 1) else arg="[y/N]" reg=$(locale yesexpr) default=(1 0) fi read -p "$1 ${arg}? : " answer [[ "$answer" =~ $reg ]] && return ${default[1]} || return ${default[0]} }
这是一个基本用法
# basic example default is no shure "question message" && echo "answer yes" || echo "answer no" # print "question message [y/N]? : " # basic example default set to yes shure "question message" y && echo "answer yes" || echo "answer no" # print "question message [Y/n]? : "