less
reclama do meu valor de $TERM
, ao passo que more
não. O que seria bom, exceto pelo fato de que more
é less
.
Originalmente, fiquei intrigado com as ferramentas que de repente não gostaram do meu $TERM
valor (pensei que havia configurado o Tmux para usar tmux
algumas $TERM
reinicializações do sistema atrás), mas uma questão maior acabou de entrar na sala: como é que binários idênticos de dois bytes por byte se comportam de maneira diferente?
❯ 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
Isso é no macOS. Se for alguma magia negra específica do Mac, irei mover isso para Ask Different, é claro.
O mesmo programa pode se comportar de maneira diferente se estiver sendo executado com parâmetros diferentes: no seu primeiro comando ele recebe
argv[] = {"less", NULL}
como array de argumentos da linha de comando, enquanto o segundo o chama comargv[] = {"more", NULL}
, sendo o 0º item em argv sempre o próprio nome do programa ( os argumentos "normais" começam em 1).Às vezes, isso é usado para criar programas de "chamada múltipla", o mais famoso é o BusyBox, que fornece quase todo o /bin em sistemas pequenos (por exemplo, em seu roteador Wi-Fi).
Se o programa 'less' for invocado como
more
, sua matriz de argumentos teráargv[0] == "more"
, o que permite o código de " compatibilidade POSIX more(1) " dentro de Less. (Por exemplo, em vez de procurar opções adicionais naLESS
variável de ambiente, ele as procura emMORE
.)