Como desabilito o comando 'open', sabendo que é apenas um link para o binário 'openvt'?

4

Gostaria que os usuários pudessem instalar minha ferramenta de linha de comando ...

link

... globalmente e execute-o a partir do terminal digitando open . O gerenciador de pacotes NodeJS, npm , fornece esse recurso, criando o link simbólico necessário quando você instala pacotes globalmente. Portanto, no diretório /usr/bin , vejo que o link simbólico a seguir foi realmente criado:

open -> ../lib/node_modules/occam-open-cli/open.js

No entanto, isso só funciona se eu for root, caso contrário, recebo:

Couldn't get a file descriptor referring to the console

Eu sei o que é isso, mais ou menos. Se eu digitar openvt , recebo a mesma mensagem.

Portanto, preciso excluir o alias, ou o que for, que permita que openvt seja invocado com open . Eu acho que isso é uma coisa segura a fazer, já que você sempre pode simplesmente voltar a digitar openvt se você quiser.

No entanto, estou perdido para encontrar uma maneira de fazer isso. Eu supus que havia algum tipo de alias, mas digitar unalias open não funcionou.

Então o que / onde está esse mistério open comando, alias, link simbólico ou o que for? E como posso removê-lo com segurança e aconselhar os outros a fazer o mesmo?

    
por James Smith 22.03.2018 / 17:27

2 respostas

9

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).

    
por Zanna 22.03.2018 / 18:09
2

Na verdade, havia um link simbólico open -> openvt no diretório /bin . Remover este link resolveu o problema. No entanto, de longe a melhor solução, como mencionado em outro lugar, é criar um alias no seu arquivo .bashrc ...

Navegue até seu diretório pessoal:

cd ~

Edite seu .bashrc (usei nano , mas há muitas opções):

nano .bashrc

Coloque o seguinte em algum lugar (talvez no pé):

alias open='/usr/lib/node_modules/occam-open-cli/open.js'

Você pode recarregar o arquivo digitando source .bashrc e está pronto para ir sem afetar mais nada.

    
por James Smith 22.03.2018 / 17:42