如何自动跳过Bash脚本中的more命令?管道输入y无效
解决自动跳过more命令的方法
你的问题出在more命令在交互式终端中会分页等待用户按键,而printf "y\n"仅给脚本的read命令提供输入,不影响more的交互行为。以下是几种无需修改脚本的解决办法:
方法1:将脚本输出重定向到cat,让more自动取消分页
当more的输出不是终端时,会自动跳过分页直接输出所有内容。用管道将脚本输出传给cat即可实现:
printf "y\n" | bash ./file.sh | cat
方法2:设置MORE环境变量强制more不分页
通过MORE环境变量给more传递默认参数,强制其不分页输出:
printf "y\n" | MORE=-f bash ./file.sh
-f参数会让more忽略换行限制,直接输出全部内容。
方法3:用组合输入同时处理more和read
如果需要同时给more和read提供输入,可以用yes输出空格(模拟按空格跳过more分页),再追加确认输入:
(yes ''; echo y) | bash ./file.sh
这里yes ''持续输出空行跳过more分页,echo y提供协议确认的输入。
可选:修改脚本彻底解决
如果你有权限修改脚本,直接把more换成cat即可避免分页,同时修正原脚本的分支语法错误:
#!/usr/bin/env bash cat <<_EOF_ PLEASE READ THE TERMS OF THIS AGREEMENT AND ANY PROVIDED TEXT. PLEASE READ THE TERMS OF THIS AGREEMENT AND ANY PROVIDED TEXT. PLEASE READ THE TERMS OF THIS AGREEMENT AND ANY PROVIDED TEXT. PLEASE READ THE TERMS OF THIS AGREEMENT AND ANY PROVIDED TEXT. PLEASE READ THE TERMS OF THIS AGREEMENT AND ANY PROVIDED TEXT. PLEASE READ THE TERMS OF THIS AGREEMENT AND ANY PROVIDED TEXT. PLEASE READ THE TERMS OF THIS AGREEMENT AND ANY PROVIDED TEXT. PLEASE READ THE TERMS OF THIS AGREEMENT AND ANY PROVIDED TEXT. PLEASE READ THE TERMS OF THIS AGREEMENT AND ANY PROVIDED TEXT. PLEASE READ THE TERMS OF THIS AGREEMENT AND ANY PROVIDED TEXT. PLEASE READ THE TERMS OF THIS AGREEMENT AND ANY PROVIDED TEXT _EOF_ agreed= while [ x$agreed = x ]; do echo echo "Do you accept all the terms?" echo "Do you agree to the above license terms? [y/n] " read reply leftover case $reply in y* | Y*) agreed=1;; n* | N*) echo "If you don't agree to the license you can't install this software" exit 1;; esac done
内容的提问来源于stack exchange,提问作者stanley1943
相关产品推荐
相关产品推荐

