Como visualizar as diferenças entre as páginas man de diferentes versões do mesmo programa?

4

Sempre que estou atualizando uma das minhas caixas Linux (ou seja, instalando a próxima versão da minha distribuição favorita), atualizar os respectivos arquivos de configuração sempre consumiu muito tempo, porque em muitos casos eu não altero apenas a configuração padrão da distribuição arquivos para refletir minha situação, mas eu criei meus próprios arquivos de configuração com muito cuidado.

Até agora, ao atualizar, nesses casos eu li as respectivas páginas do manual completamente do zero e fiz novos arquivos de configuração a partir do zero (isso é limpo, mas custa muito esforço) ou comparei (acho diff) os arquivos de configuração default da antiga e da nova distribuição, e quando vi uma diferença que poderia ser importante, eu a "portei" (mesclada) no meu próprio arquivo de configuração (não estou satisfeito com esse método por várias razões, uma delas sendo que o mantenedor poderia ter ignorado uma nova diretiva de configuração que poderia ser perigosa de ignorar no meu caso, mas nem sempre foi evitável se eu estivesse com pressa).

Eu sempre me perguntei como outras pessoas lidam com esse problema. Uma ideia seria comparar a página de manual da versão antiga de um software com a da nova versão, observando todas as diferenças nas diretivas de configuração ou métodos imediatamente.

Então aqui está a pergunta: Alguém sabe sobre um visualizador de diferenças específico para páginas man, principalmente para o console de texto (o cenário principal estaria funcionando via SSH sem X)?

Por favor, note que estou ciente de que há muitos espectadores diferentes (li dezenas de artigos e perguntas e respostas sobre esse assunto). Minha pergunta é especificamente sobre os visualizadores de diferenças para páginas man que oferecem algum conforto (por exemplo, você diz a ele o diretório base das páginas do manual antigo e só precisa dizer "show diff sshd_config" ou algo parecido).

Eu também estou ciente de que finalmente consegui ler o log de alterações do respectivo upstream, mas tenho visto muitos casos em que você não podia confiar nele (ou seja, nem todas as alterações foram mencionadas), é muito mais inconveniente e algumas distribuições remendam o upstream, então eu diria que isso não é realmente uma opção. Comparar o código-fonte da versão antiga com o novo apenas para descobrir novas opções de configuração parece ser demais e talvez seja impossível no caso do Apache, Sendmail e similares. Em contraste, comparar as páginas man parece razoável (se possível).

Alguma idéia?

    
por Binarus 17.01.2017 / 00:20

2 respostas

6

As páginas man, uma vez alteradas para um formato legível por humanos, são arquivos de texto que você pode diferenciar com qualquer ferramenta que lhe agrade. Aqui estão dois exemplos, como duas funções bash , para duas ferramentas: diff e vimdiff . Adapte-os à sua ferramenta favorita.

com vimdiff :

vimdiff_man() { vimdiff -R <(man --manpath="/old/path/to/man" "$1") <(man "$1"); }

Com diff , lado a lado, ajustado à largura da tela:

diff_man() (
    width="${COLUMNS:-80}"
    export MANWIDTH=$((width / 2 - 2))
    diff -y -W"$width" <(man --manpath="/old/path/to/man" "$1") <(man "$1") | less
)

Em cada função, estou fazendo a diferença entre dois pseudo-arquivos <(...) , cada um contendo o resultado do comando man entre parênteses (isto é Substituição do processo do bash ).

/old/path/to/man é a hierarquia de diretórios que contém suas páginas de manual antigas. Espera-se que tenha os mesmos níveis de homem secundário man1 , man2 , ... como seu diretório manual principal (provavelmente /usr/share/man ). Mude-o para atender às suas necessidades.

Uso:

diff_man sshd_config
vimdiff_man sshd_config
    
por 17.01.2017 / 01:28
2

Desculpe pessoal, eu não pude resistir a isso ... Modificando a resposta aceita assim:

diff -y -w -W 150 <(links -dump  "http://man.he.net/?topic=grep&section=all" |less |fold -s -w 70) <(man grep |less |fold -s -w 70)

Você pode comparar páginas de manual locais instaladas lado a lado com man pages on-line ... Eu apenas gostei e pensei em compartilhá-la.

Claro que você pode substituir o man.he.net pelo seu visualizador de manpage online favorito (por exemplo, link ).

Isso também funciona bem:

diff -y -w -W 150 <(links -dump "https://www.mankier.com/?q=grep" |less |fold -s -w 70) <(man grep |less |fold -s -w 70)

PS: -w é necessário ignorar todo o espaço em branco e comparar apenas as linhas. menos é usado em ambos os casos para um formato uniforme durante a leitura e comparação.

    
por 17.01.2017 / 15:56

Tags