Colorir hardlinks na saída ls?

5

Como posso colorir os hardlinks eu mesmo? Acontece que em um antigo Ubuntu 10.04 eu tenho, isso acontece por padrão (mesmo .bashrc e .profile em uso), enquanto que no mais novo Ubuntu 12.04 isso não acontece.

Esta é a saída no Ubuntu 10.04 (a que eu desejo):

EestaéasaídanoUbuntu12.04:

O arquivo relevante é .vimrc , no entanto, .viminfo é um arquivo comum com contagem de links 1, em contraste com o .vimrc com hardlink.

É claro que o fato de o GNU coreutils usar páginas texinfo em vez de man pages não facilita as coisas. Eu encontrei isso aqui , mas não se refere ao caso que estou procurando.

TL; DR: como conseguir colorir arquivos com hardlink (como em: link count > 1) do jeito que eu gosto em várias versões do Ubuntu.

    
por 0xC0000022L 05.02.2013 / 02:05

2 respostas

8

Faça isso:

LS_COLORS="mh=44;37" ls -l

E você pode editar seu ~/.profile para alterar LS_COLORS de acordo.

Antecedentes

Esse recurso ativado como padrão em 2008 tem sido desativado por padrão em 2009 . De alguma forma, o congelamento do Ubuntu 10.04 estava exatamente entre esses momentos.

Usando o repositório Git do coreutils , vejo que o commit para reverter a colorização automática está em vigor desde a versão 7,5:

git tag --contains 0df338f6719ec2bcf1e1dea2d8b12dc66daf8a1e
v7.5
v7.6
[...]

Nas versões anteriores a 7.1, parece não haver suporte upstream para isso:

git tag --contains 1e48b1fee5fa2ad2d1802771eafbfcddb38a24cb
v7.1
v7.2
[...]

O arquivo de origem multihardlink.sh , conduza-me para o valor exato de LS_COLORS para ativá-lo novamente.

Você pode reabrir o LP Bug # 123423 .

    
por gertvdijk 05.02.2013 / 02:24
2

Com base na resposta de gertvdijk, criei o seguinte snippet, que atende às minhas necessidades:

if [[ -e "/etc/debian_version" ]] && type dircolors > /dev/null 2>&1; then
    command dircolors|command grep -q 'hl=' && export LS_COLORS="ln=01;36:hl=00;36"
    command dircolors|command grep -q 'mh=' && export LS_COLORS="ln=01;36:mh=00;36"
fi

Edit: Eu realmente tive que reescrever o trecho (veja o histórico de edição).

Acontece que ls engole a saída de erro referente a LS_COLORS quando o canaliza. Pelo menos eu não pude grep , nem com 2>&1 nem sem. Daí as mudanças. Verificamos se dircolors está disponível. Se estiver, espera-se que ele emita um trecho de código de shell (compatível com Bourne shell por padrão) que contém os padrões para os vários tipos de arquivo reconhecidos. Por isso, verificamos hl= ou mh= respectivamente na saída de dircolors . Desta forma, podemos detectar o que é esperado por ls e export LS_COLORS em conformidade. Pode ser mais seguro usar grep para :hl= e :mh= , respectivamente, para excluir a possibilidade de extensões de arquivo terminarem em hl ou mh e corresponderem à nossa condição.

As cores acima são ciano claro em preto para links suaves e um ciano mais escuro em preto padrão para links físicos.

Você pode variar a condição de nível superior, é claro. Atualmente, estou apenas configurando-o no Debian / Ubuntu, porque não tenho tempo para testá-lo em sistemas RHEL / CentOS antigos no momento.

NB: as invocações via command são para solucionar possíveis aliases / funções com os mesmos nomes das ferramentas que tentamos usar aqui.

    
por 0xC0000022L 05.02.2013 / 04:12