“终端功能不全”用“less”发出警告,但用“more”则不发出警告(这也是“less”)

Ant*_*off 16 terminal shell macos

less抱怨我的值$TERM,而more没有\xe2\x80\x99t。more除了这个事实之外,这没什么问题less

\n

最初,我对突然不喜欢我的值的工具感到困惑$TERM(我以为我将 Tmux 配置为tmux$TERM系统重新启动前使用),但一个更大的问题刚刚进入房间:两个字节相同的二进制文件的行为为何不同?

\n
\xe2\x9d\xaf less\nWARNING: terminal is not fully functional\nMissing filename ("less --help" for help)\n\n\xe2\x9d\xaf more\nMissing filename ("less --help" for help)\n\n\xe2\x9d\xaf echo (which less) (which more)\n/usr/bin/less /usr/bin/more\n\n\xe2\x9d\xaf ls -Al /usr/bin/less\n-rwxr-xr-x  2 root  wheel  384848 May 13 06:29 /usr/bin/less*\n\n\xe2\x9d\xaf ls -Al /usr/bin/more\n-rwxr-xr-x  2 root  wheel  384848 May 13 06:29 /usr/bin/more*\n\n\xe2\x9d\xaf openssl dgst -sha256 /usr/bin/less\nSHA2-256(/usr/bin/less)= 8567f60723d396cb9c6e8d0a5f5206f321adbb2982d71e75cd6ec32be4256591\n\n\xe2\x9d\xaf openssl dgst -sha256 /usr/bin/more\nSHA2-256(/usr/bin/more)= 8567f60723d396cb9c6e8d0a5f5206f321adbb2982d71e75cd6ec32be4256591\n\n\xe2\x9d\xaf echo $TERM\ntmux\n\n\xe2\x9d\xaf tmux -V\ntmux 3.3a\n\n\xe2\x9d\xaf echo $SHELL\n/opt/local/bin/fish\n
Run Code Online (Sandbox Code Playgroud)\n

这是在 macOS 中。当然,如果是 Mac 特有的黑魔法,我会将其移至 Ask Different。

\n

use*_*686 25

如果使用不同的参数运行同一个程序,则其行为可能会有所不同:在第一个命令中,它argv[] = {"less", NULL}作为命令行参数数组接收,而第二个命令则使用 调用它argv[] = {"more", NULL},argv 中的第 0 项始终是程序自己的名称( “正常”参数从 1) 开始。

这有时用于创建“多呼叫”程序,最著名的是 BusyBox,它在小型系统中(例如在 Wi-Fi 路由器中)提供几乎整个 /bin。

如果“less”程序被调用为more,其参数数组将具有argv[0] == "more",这将在 Less 中启用“ POSIX more(1) 兼容性”代码。(例如,它不是在环境变量中查找其他选项,LESS而是在 中查找它们MORE。)

  • 准确地说,它不会“检查它被称为什么二进制文件”;它正在接受调用者所说的它使用的名称。它可能是伪造的或错误的,这取决于调用程序。 (并且通常不包含路径。) (6认同)