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

为何同一份less二进制文件以less和more调用时行为不同?

为何同一份less二进制文件以less和more调用时行为不同?

这事儿其实是less的一个有点“心机”的设计——它会根据调用它的程序名(也就是程序启动时拿到的argv[0]值)自动切换行为模式!

核心原因拆解

  • 当你用less这个名字调用它时,它会以完整的less原生模式运行,这时候会严格校验终端环境(比如$TERM变量的完整性),如果它判断你的终端配置达不到它的要求,就会弹出WARNING: terminal is not fully functional的提示。
  • 当你用more这个名字调用它时(不管是通过硬链接、软链接还是直接改名),它会自动切换到more兼容模式。这个模式下,它会模拟传统more工具的行为逻辑,同时放宽了终端环境的校验标准,自然就不会抛出终端相关的警告。

结合你的验证结果来看

从你给出的命令输出完全能确认:/usr/bin/less和/usr/bin/more是同一个二进制文件的硬链接(文件链接数都是2,SHA256哈希值完全一致),本质上运行的是同一个程序——只是程序启动时“看到”自己被叫做more,就自动切换了行为模式。

额外小验证

你可以试试这两个操作来印证这个逻辑:

  1. 用less强制开启more模式:less -m,这时候它的行为会和直接调用more一致,也不会弹出终端警告;
  2. 查看less的手册(man less),里面会明确提到“当程序名为more时,自动启用more兼容模式”的相关说明。

至于你提到的Tmux的$TERM配置问题:less的原生模式对$TERM的定义要求更高(比如可能需要tmux-256color而非tmux),但more兼容模式下对终端的适配更宽松,这才出现了两种调用方式的差异。

备注:内容来源于stack exchange,提问作者Anton Strogonoff

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 13:40:28