Evitando confrontos de nomes para utilitários no PATH

1

Sempre hesitei em incluir qualquer diretório definido pelo usuário na minha variável de ambiente PATH ou colocar scripts personalizados em um diretório já incluído.

A razão para isto é que eu não sei como evitar um caso de borda (reconhecidamente) improvável, isto é, um binário chamando um programa externo que por acaso tem o mesmo nome de um dos meus scripts customizados sem o binário desejado na máquina e, portanto, o programa realmente chamando meu script personalizado, o que só pode levar a problemas.

Isso é um pouco semelhante a sombrear um binário com um script personalizado de mesmo nome, como geralmente é feito com scripts de wrapper. Nesse caso, no entanto, o programa em questão não existe na máquina (somente um script personalizado com o mesmo nome) e, portanto, a posição do local do script personalizado na variável PATH também não é importante.

Existe alguma maneira de evitar tal situação além de simplesmente não armazenar scripts personalizados nos diretórios usados na variável PATH ? A única possibilidade que me vem à mente é sempre usar caminhos absolutos para chamar scripts personalizados.

    
por wally123 10.02.2018 / 16:50

1 resposta

3

Três soluções:

  1. Sempre chame seus scripts personalizados com um caminho absoluto, como você mesmo sugere, sem modificar $PATH .

    Isso garantirá que você chame seus próprios scripts quando souber que deseja e que seus scripts não "ocultem" acidentalmente nenhum outro utilitário.

  2. Verifique se os caminhos dos scripts personalizados estão localizados no final de $PATH , depois dos caminhos para diretórios e diretórios padrão que contêm software de terceiros.

    Isso tem a desvantagem de que, se acontecer de você ter um script com o mesmo nome de outro utilitário, você chamaria esse utilitário em vez de seu próprio script. Este é o problema inverso do que você está preocupado.

  3. Certifique-se de que seus scripts tenham nomes exclusivos e faça como no ponto anterior.

    Utilitários do sistema raramente (e utilitários padrão nunca), por exemplo, usam .sh como sufixo de nome de arquivo. Você também pode / alternativamente considerar o estabelecimento de um "namespace" como um prefixo wally- em seus próprios scripts ( wally-backup.sh ou wally-getmail ).

Em geral, você deve saber quais nomes os utilitários padrão do Unix têm e evitá-los ( test , por exemplo, é um nome ruim para um utilitário personalizado). Uma lista de nomes de utilitários padrão está disponível aqui . Da mesma forma, os nomes de utilitários internos especiais não devem ser usados para scripts personalizados. Eles estão listados no final deste link .

Se você modificar seu $PATH , modifique-o privadamente , ou seja, apenas para o usuário não privilegiado com o qual você faz login. Não o modifique em todo o sistema, a menos que você seja um administrador do sistema em um sistema multiusuário e seus scripts sejam realmente usados por outras pessoas (e seria incômodo para eles modificarem seus próprios $PATH por um motivo ou outro). Se você modificar o $PATH do seu sistema, tenha certeza absoluta de que o "problema de sombreamento" não acontece, ou a funcionalidade básica do sistema pode ser comprometida, dependendo de onde o $PATH pode ser usado.

    
por 10.02.2018 / 17:18

Tags