Onde devo instalar páginas de manual no diretório do usuário?

13

Estou tentando criar um Makefile para um pequeno utilitário Perl que escrevi, e estou lutando para descobrir uma maneira de descobrir onde instalar minha página de manual quando ela makeé executada como um usuário não root .

Atualmente, estou analisando a saída de manpathpara descobrir o primeiro caminho no $HOMEdiretório ... e quase funciona bem.

Os caminhos que encontrei são ~/mane~/share/man

O único problema é que, se esses diretórios não existem em primeiro lugar, manpathnão gera nenhum deles.

Questões

  • Existe uma maneira portátil de descobrir onde eu devo instalar as páginas de manual no diretório $ HOME do usuário?
  • Caso contrário, qual deles deve ser preferido?
Romuald Brunet
fonte

Respostas:

13

Você pode colocar as páginas de manual neste diretório:

$HOME/.local/share/man

Acessando diretamente

E então você pode acessá-los diretamente usando man:

man $HOME/.local/share/man/manX/manpage.1.gz

$ MANPATH

Você pode verificar o que $MANPATHhá com o comando manpathou fazer eco da variável de ambiente $MANPATH.

Exemplos

$ manpath
manpath: warning: $MANPATH set, ignoring /etc/man_db.conf
/home/saml/apps/perl5/perlbrew/perls/perl-5.14.0/man:/home/saml/.rvm/rubies/ruby-1.9.2-p180/share/man:/home/saml/.rvm/man:/usr/local/share/man:/usr/share/man:/usr/brlcad/share/man:/usr/man:/usr/brlcad/share/man:/usr/brlcad/share/man

$ echo $MANPATH
/home/saml/apps/perl5/perlbrew/perls/perl-5.14.0/man:/home/saml/.rvm/rubies/ruby-1.9.2-p180/share/man:/home/saml/.rvm/man:/usr/local/share/man:/usr/share/man:/usr/brlcad/share/man:/usr/man:/usr/brlcad/share/man:/usr/brlcad/share/man

Você pode adicionar coisas ao MANPATH temporariamente:

MANPATH=$HOME/.local/share/man:$MANPATH

Se você quiser tornar isso permanente, adicione um arquivo no seu /etc/profile.d/diretório chamado myman.bashcom a MANPATH=linha acima . Isso será escolhido em todo o sistema para todos. Se você deseja que seja apenas para você, adicione-o ao seu $HOME/.bash_profileou $HOME/.bashrc.

slm
fonte
2
Para suprimir manpathavisos sobre MANPATHa configuração, você pode passar a -qopção.
Joseph R.
2
Sim, eu sei que posso dizer para manonde procurar. Estou à procura de uma forma genérica, portátil para uma instalação genérico (isto é: onde está manolhando para uma configuração padrão)
Romuald Brunet
Faça um echo $MANPATHe veja o que isso mostra. Esses são bons lugares para começar a procurar ou usar o manpathcomando como mostrei na minha resposta.
slm
0

Responder com descrição

Estou executando o Cygwin no Windows 7. Quando tento

echo $MANPATH

Eu não recebo nada. Aqui está minha maneira portátil de encontrar onde colocar novas manpáginas.

$ { find / -maxdepth 2 -type d -name "*man*" 3>&2 2>&1 1>&3 | \
grep -v 'Permission denied' >&3; } 3>&2 2>&1

(Uma nota sobre esse comando maluco está na parte inferior desta resposta.)

Você pode simplesmente substituir /por ~. Outra possibilidade está na seção Outra nota abaixo.

Na minha máquina, o findcomando retornou:

 /etc/openwsman
 /lib/filemanager-actions
 /lib/gnome-commander
 /lib/help2man
 /lib/window-manager-settings
 /share/man
 /usr/man

Para mim, isso significava que havia duas possibilidades: /share/mane /usr/man.

Eu escolhi usar /usr/man, o que você não usaria, mas eu precisava explorar um pouco mais.

$ ls -l /usr/man
total 0
drwxr-xr-x+ 1 me Users 0 April 31 17:13 man1

Então, onde eu tinha os novos manarquivos em um doc/subdiretório do meu diretório de trabalho, eu usei

$ cp -R doc/* /usr/man/man1

Agora, eu poderia acessar meu "manual" digitando

$ man my_new_executable

Se você não vir um candidato provável, poderá remover esta parte ou alterá-la, por exemplo -maxdepth 3, para , ou 4, ou 5, ou por mais profundo que seja necessário para encontrar o que você precisa. Quando fiz isso 3, encontrei dois outros candidatos /var/cache/mane usr/share/man, mas eu já havia encontrado uma solução funcional, então não mexi com eles.


Outra nota

Acredito que /share/man/man1ou /var/cache/manestaria disponível para usuários não root, como você solicitou. Por favor corrija-me se eu estiver errado.


A nota prometida na parte inferior

Observe que usei a -maxdepth 2opção com find, porque achei que o mandiretório estaria dentro de dois diretórios da raiz do sistema de arquivos e não queria obter muitos diretórios externos que de alguma forma tivessem a substring man, assim como o /lib/gnome-comander .

O material extra finddisponível para suprimir quaisquer Permission deniederros, caso você não tenha acesso suou sudo. Aqui está uma ótima descrição do que está acontecendo. (Procure a linha que começa com "gniourf_gniourf".)

bballdave025
fonte
0

Instalei alguns aplicativos que compilei, com os respectivos configureconjuntos para instalação ${HOME}/usr/local.

Acho agora que tenho diretórios

~/usr/local/share/man/man1
~/usr/local/share/man/man3
~/usr/local/share/man/man5

com manpages gnuplot.1, gnuplot-ja.1, python3.1, python3.5.1, libpng.3, libpngpf.3, zlib.3, png.5, então eu acho que (dado o meu prefixo) é uma bela localização padrão para aplicativos instalados localmente.

É então um local candidato para os casos em que é necessário escolher manualmente o mandiretório local .

Obviamente, pode-se adicionar caminhos arbitrários (e deve fazê-lo mesmo nos casos justos mencionados) para manpáginas com

export MANPATH="$HOME/usr/local/share/man${MANPATH:+:${MANPATH}}"

(veja isto ).

sancho.s Restabelecer Monica
fonte