O motivo pelo qual /bin/open
tem precedência sobre /usr/bin/open
em seu sistema é presumivelmente que /bin
vem antes de /usr/bin
em seu PATH. Para examinar seu PATH, você pode executar echo $PATH
. Os elementos são separados por dois pontos.
Você recebeu o comando que queria quando usou (suponho) sudo
para executar open
ou para iniciar um shell raiz no qual o executou, porque sudo
usa seu próprio PATH, definido em /etc/sudoers
como secure_path
, que no meu sistema é
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
Como você pode ver, /usr/bin
vem antes de /bin
.
Acho que sua descoberta é estranha, porque, até onde eu sei, /usr/bin
geralmente vem antes de /bin
. Seus usuários podem não ter o mesmo problema que você.
No entanto, para ser seguro, você pode ter seu programa instalado em /usr/local/bin
, que sempre deve vir antes de /usr/bin
e /bin
no PATH de um usuário para que o software criado localmente tenha precedência sobre outros comandos com o mesmo nome.
Ainda mais seguro, como steeldriver sugerido , faça com que seus usuários (ou seu script de instalação) definam um alias para sua ferramenta em um arquivo de configuração do shell como ~/.bashrc
. Os aliases sempre têm precedência sobre outros comandos. Ao colocar um alias no seu ~/.bashrc
, você garante que ele só será conhecido pelos shells interativos e não interferirá em outros programas.
Excluir o link simbólico pode causar problemas se os programas tentarem executar /bin/open
esperando openvt
e podem não ser confiáveis, como apontado por steeldriver, porque o link simbólico pode ser recriado quando o pacote que o fornece é atualizado ou reinstalado ( ou seja, bastante imprevisível).