You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自动跳过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 04:52:01