less
抱怨我的 值$TERM
,而则不抱怨。除了之外more
, 都很好。more
less
最初,我对工具突然不喜欢我的值感到困惑$TERM
(我以为我tmux
在$TERM
几次系统重启之前将 Tmux 配置为使用它),但一个更大的问题刚刚出现了:为什么两个字节相同的二进制文件的行为不同?
❯ 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。
答案1
如果使用不同的参数运行同一个程序,其行为可能会有所不同:在第一个命令中,它接收argv[] = {"less", NULL}
命令行参数数组,而第二个命令使用 调用它argv[] = {"more", NULL}
,其中 argv 中的第 0 项始终是程序自己的名字(“正常”参数从 1 开始)。
这有时用于创建“多呼叫”程序,最著名的是 BusyBox,它在小型系统中提供几乎整个 /bin(例如在您的 Wi-Fi 路由器中)。
如果以 的形式调用“less”程序more
,其参数数组将具有argv[0] == "more"
,这使得“POSIX more(1) 兼容性“Less 中的代码。(例如,它不是在环境变量中寻找其他选项,LESS
而是在中寻找它们MORE
。)