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

为何less命令在bash脚本函数或代码块中表现得像cat命令?

解决less在bash函数/代码块中通过tee后不分页的问题

问题根源

当less的标准输出被管道(比如| tee)接管时,它会检测到当前输出不是终端(TTY),自动切换到非交互模式,直接输出全部内容,表现得和cat一致。不管是在函数内还是{}代码块中,只要输出被重定向到管道而非终端,就会触发这个行为。

解决方案

让less直接输出到当前终端,绕过管道的影响。修改脚本如下:

#!/bin/bash

tryit()
{
    longfile=$(mktemp)
    /bin/ls -R /etc 2>/dev/null > "$longfile"

    # 将less的输出直接定向到终端,确保分页交互正常
    less -R "$longfile" > /dev/tty
    # 清理临时文件
    rm "$longfile"
}

{
    tryit
} 2>&1 | tee SOME_LOGFILE

原理说明

通过> /dev/tty强制less的输出连接到当前终端,这样它会检测到终端环境,保持交互分页模式。而脚本中其他的输出(比如错误信息)依然会通过管道进入tee,同时写入日志文件和终端。

内容的提问来源于stack exchange,提问作者William Dickerson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 17:27:16