Como definir o binário instalado pelo gerenciador de pacotes como padrão?

3

Eu instalei uma versão mais recente do tcpdump via MacPorts e gostaria de torná-lo o binário padrão.

$ which -a tcpdump
/usr/sbin/tcpdump
/opt/local/sbin/tcpdump

Por enquanto, defino um alias , mas isso não impede que man mostre a documentação mais antiga.

    
por 1.61803 15.10.2015 / 00:29

2 respostas

0

Em OS X 10.8.5 , bash 3.2.53(1) , MacPorts 2.3.4 você realmente não deve fazer nada.

Eu não sei porque não funcionou no começo. O valor de PATH pode ter sido armazenado e não atualizado (mais sobre isso abaixo).

Eu tentei

· MANPATH como sugerido por thrig , mas isso não funcionou. Da man page de man : "It overrides the configuration file and the automatic search path" .

· export ing o PATH do meu perfil (global) com os diretórios do gerenciador de pacotes primeiro. Isso os prefixou três vezes e os sufixou uma vez e configurou os binários / man pages mais novos como padrão, mas eu estava curioso sobre essa nova composição mais longa de PATH (o valor antigo tinha todos os diretórios apenas uma vez, mas em uma ordem diferente, primeiro, depois o gerenciador de pacotes).

Para este tópico, verifique na SU, Onde o $ PATH é definido no OS X 10.6 Snow Leopard? .

Acontece que MacPorts instalador adiciona os diretórios em ~/.profile .

# MacPorts Installer addition on 2015-10-10_at_20:55:20: adding an appropriate PATH variable for use with MacPorts.
export PATH="/opt/local/bin:/opt/local/sbin:$PATH"
# Finished adapting your PATH environment variable for use with MacPorts.

Eu tive isso várias vezes, então comecei a comentar tudo, exceto o último. Isso resultou em um PATH limpo.

Mas como o man obtém a documentação mais recente?

Da seção SEARCH PATH FOR MANUAL PAGES :

In  addition,  for  each  directory in the command search path (we'll call it a "command
directory") for which you do not have a MANPATH_MAP statement, man automatically looks for
a manual page directory "nearby" namely as a subdirectory in the command directory itself or
in the parent directory of the command directory.

You can disable the automatic "nearby" searches by including a NOAUTOPATH statement in
/private/etc/man.conf.

Eu confirmei isso ativando temporariamente NOAUTOPATH .

Exemplo

$ type tcpdump
tcpdump is /opt/local/sbin/tcpdump

$ ll -d /opt/local/man
lrwxr-xr-x  1 root  admin  9 Oct 10 20:55:20 2015 /opt/local/man -> share/man

Para outros gerenciadores de pacotes YMMV, mas não muito, suponho.

    
por 17.10.2015 / 15:29
2

Você precisará ajustar as variáveis de ambiente PATH e MANPATH para listar os caminhos do MacPorts antes dos fornecedores. Para bash , tente algo como o seguinte em .bashrc (ou possivelmente também .bash_profile ) e, em seguida, exec bash para recarregar o shell em execução:

export MANPATH=/opt/local/share/man:$MANPATH

Outros comandos úteis podem ser para ver qual é o% atual MANPATH , e para encontrar todos os lugares possíveis, o MacPorts oculta páginas man (nem todos podem ser diretórios de páginas man, mas os devidos devem ter man[0-9] subdirs. .):

echo $MANPATH
find /opt -type d -name man

PATH é semelhante, basicamente:

export PATH=/opt/local/sbin:/opt/local/bin:$PATH

deve ser a opção mais simples, mas, novamente, teste com exec bash e echo $PATH ...

Cuidado, porém, que a Apple tenha um script /usr/libexec/path_helper que é executado a partir de arquivos rc globais ( grep -l path_helper /etc/* 2>/dev/null ). Suas personalizações devem acontecer após este programa altera PATH e MANPATH , caso contrário, path_helper redefinirá as configurações para o que a Apple define como padrão. A saída path_helper pode ser usada como ponto de partida:

/usr/libexec/path_helper -s >> ~/.bashrc

Edite essas linhas anexadas para incluir os caminhos desejados na ordem desejada. (Não use apenas > , pois isso irá espancar seu arquivo .bashrc , >> é anexado ...)

    
por 15.10.2015 / 00:49