我想暂停shell脚本中的输入,并提示用户进行选择。标准的是、否或取消类型问题。如何在典型的bash提示符中完成此操作?
当前回答
一个衬垫:
read -p "Continue? [Enter] → Yes, [Ctrl]+[C] → No."
这假设“否”和“取消”具有相同的结果,因此没有理由区别对待它们。
其他回答
一种简单的方法是使用xargs-p或gnu-parallel-interactive。
我更喜欢xargs的行为,因为它像其他交互式unix命令一样,在提示符后立即执行每个命令,而不是收集yes以在最后运行。(在完成所需任务后,可以按Ctrl-C键。)
例如。,
echo *.xml | xargs -p -n 1 -J {} mv {} backup/
使用read命令:
echo Would you like to install? "(Y or N)"
read x
# now check if $x is "y"
if [ "$x" = "y" ]; then
# do something here!
fi
然后你需要的所有其他东西
yn() {
if [[ 'y' == `read -s -n 1 -p "[y/n]: " Y; echo $Y` ]];
then eval $1;
else eval $2;
fi }
yn 'echo yes' 'echo no'
yn 'echo absent no function works too!'
这个问题有很多很好的答案,但从我看来,没有一个是我的理想,那就是:
简单一点,只需要几行外壳使用单个y/n键(无需按enter键)如果只按回车键,则默认为yes也可以使用大写的Y/N
这是我的版本,它具有这些财产:
read -n1 -p "Continue? (Y/n) " confirm
if ! echo $confirm | grep '^[Yy]\?$'; then
exit 1
fi
如果要在两个分支上运行代码,可以修改该条件,使其仅在“yes”上运行(只需删除if语句中的!)或添加else。
作为单行命令的朋友,我使用了以下命令:
while [ -z $prompt ]; do read -p "Continue (y/n)?" choice;case "$choice" in y|Y ) prompt=true; break;; n|N ) exit 0;; esac; done; prompt=;
以长格式编写,其工作原理如下:
while [ -z $prompt ];
do read -p "Continue (y/n)?" choice;
case "$choice" in
y|Y ) prompt=true; break;;
n|N ) exit 0;;
esac;
done;
prompt=;
推荐文章
- 在Unix中,我可以在一个目录中运行'make'而不首先cd'到该目录吗?
- Github权限被拒绝:ssh添加代理没有身份
- 在bash中使用正则表达式进行搜索和替换
- 如何从命令行重置Jenkins安全设置?
- 如何查看Linux共享库正在导出的函数列表?
- 在Docker Alpine容器中启动一个shell
- 如何在Python中实现常见的bash习语?
- 如何通过docker运行传递参数到Shell脚本
- Bash“if [false];”返回true而不是false——为什么?
- 在shell脚本中使用$()而不是反引号的好处是什么?
- 快速unix命令显示文件中间的特定行?
- fork(), vfork(), exec()和clone()的区别
- 如何从查找“类型d”中排除此/ current / dot文件夹
- 检查bash变量是否等于0
- 在tmux中保持窗口名称固定