less
抱怨我的价值$TERM
,而more
没有。这会很好,除了事实more
是less
。
最初我对突然不喜欢我的值的工具感到困惑$TERM
(我以为我配置 Tmux 以tmux
在$TERM
几次系统重启之前使用),但一个更大的问题刚刚进入房间:为什么两个字节对字节相同的二进制文件表现不同?
❯ less
WARNING: terminal is not fully functional
Missing filename ("less --help" for help)
❯ more
Missing filename ("less --help" for help)
❯ echo (which less) (which more)
/usr/bin/less /usr/bin/more
❯ ls -Al /usr/bin/less
-rwxr-xr-x 2 root wheel 384848 May 13 06:29 /usr/bin/less*
❯ ls -Al /usr/bin/more
-rwxr-xr-x 2 root wheel 384848 May 13 06:29 /usr/bin/more*
❯ openssl dgst -sha256 /usr/bin/less
SHA2-256(/usr/bin/less)= 8567f60723d396cb9c6e8d0a5f5206f321adbb2982d71e75cd6ec32be4256591
❯ openssl dgst -sha256 /usr/bin/more
SHA2-256(/usr/bin/more)= 8567f60723d396cb9c6e8d0a5f5206f321adbb2982d71e75cd6ec32be4256591
❯ echo $TERM
tmux
❯ tmux -V
tmux 3.3a
❯ echo $SHELL
/opt/local/bin/fish
这是在 macOS 中。如果它是一些特定于 Mac 的黑魔法,我当然会将其移至 Ask Different。
如果使用不同的参数运行同一个程序,它的行为可能会有所不同:在您的第一个命令中,它
argv[] = {"less", NULL}
作为命令行参数数组接收,而第二个命令使用 调用它argv[] = {"more", NULL}
,argv 中的第 0 项始终是程序自己的名称( “正常”参数从 1) 开始。这有时用于创建“多呼叫”程序,最著名的是 BusyBox,它在小型系统(例如,在您的 Wi-Fi 路由器中)中几乎提供了整个 /bin。
如果 'less' 程序被调用为
more
,它的参数数组将有argv[0] == "more"
,这使得Less 中的“ POSIX more(1) compatibility ”代码成为可能。(例如,它不是在环境变量中查找其他选项,LESS
而是在 中查找它们MORE
。)