executáveis ambiguamente nomeados

1

Parece que em tcsh se eu tiver chamado ambiguamente executáveis em duas pastas separadas no $PATH que ele direciona para a pasta criada mais recentemente. Estou correcto? E isso é sempre verdade?

    
por JasonShell 10.05.2013 / 00:37

4 respostas

1

Em geral, a ordem será encontrada em $PATH , já que esse é o uso pretendido para $PATH .

Poderia haver uma exceção a essa regra, mas isso exigiria que o comando fosse codificado com um diretório para o comando no software. Eu consideraria essa prática ruim embora.

    
por 10.05.2013 / 03:54
0

Você não pode ter dois arquivos com o mesmo nome no mesmo diretório. Se houver várias versões de prog , você terá uma, e. em /usr/bin e outro em /usr/local/bin , e a variável de ambiente PATH decide qual deles é escolhido. Isso é feito por uma das famílias exec(3) que olha para o PATH (provavelmente execvp(3) ), o shell não tem como dizer aqui.

    
por 10.05.2013 / 03:16
0

No Solaris, normalmente há dois diretórios (na verdade, mais de dois) que contêm diferentes versões do mesmo programa de nomes. Um exemplo é ps , que é encontrado em /usr/ucb e /usr/bin . Se /usr/ucb e /usr/bin aparecerem em PATH , a versão de ps executada será aquela que aparecer primeiro em PATH .

    
por 10.05.2013 / 05:19
0

Todos os shells atravessam os diretórios no $PATH em ordem e executam o primeiro comando que encontrarem. Por exemplo, se seu caminho for /usr/local/bin:/usr/bin:/bin , o comando de /usr/local/bin será executado se houver um; se não houver, o comando de /usr/bin será executado e assim por diante. Não importa em qual ordem os comandos foram instalados.

Há uma exceção: se você instalar um programa enquanto o shell já estiver em execução, o shell pode ter mantido o local do programa em um cache, caso em que ele continuará executando o programa antigo. Por exemplo, se você iniciar o tcsh, execute foo , que é nesse ponto /usr/bin/foo , depois instale outra versão do programa em /usr/local/bin/foo e chame foo desse shell novamente, ele ainda executará% código%. Um shell recém-iniciado pegará /usr/bin/foo . Execute o comando /usr/local/bin/foo para esvaziar o cache de locais de comando do tcsh. No bash e zsh, o comando equivalente é rehash (zsh também entende hash -r ).

    
por 13.05.2013 / 03:15