Links simbólicos de coordenadas de cores / softlinks com base em onde eles se referem

1

Existe alguma maneira de coordenar os links / links simbólicos de cores com base em onde eles estão vinculados, ou talvez por quem eles 'pertencem' (da mesma forma para colorir a saída de ls , por exemplo)?

Para dar um exemplo do porquê eu acho que isso pode ser legal, eu tenho uma conta em um servidor no trabalho, e posso instalar software no meu diretório, e fazer softlinks para diretórios atualmente dentro do meu caminho - mas não posso link em /usr/local/bin por exemplo, como não sou sudoer. Então eu posso imaginar uma situação em que um programa que eu linko, acaba com o mesmo identificador no PATH como um instalado centralmente ...

Espero que este exemplo hipotético ilustre o que quero dizer: Vamos dizer que eu vinculei algum programa que instalei em ~/newprogram/ ao diretório ~/Apps/ que eu já defini para existir no meu PATH.

Se eu quiser chamar o novo programa e o fizer com o preenchimento automático, talvez já exista um aplicativo instalado pelos administradores que use o mesmo nome de link simbólico (se isso for possível, eu não verifiquei) . Quando eu abro para autocompletar uma substring do nome do programa, eu devo ser apresentado com todas as várias opções - vamos dizer que é algo como isto:

user@server:~$ newprog          #double tab:
newprog       newprogram       newprogram

Portanto, há várias correspondências e duas com o mesmo nome de atalho / programa no caminho vinculado ou diretamente. E digamos que um é "meu" e o outro é de /usr/local/bin .

Poderia cada ocorrência de "newprogram" ser colorida de forma que o novo programa que se refere a um meu com link simbólico é de uma cor, e a outra ocorrência de "newprogram" é colorida para indicar que é presente em algum outro diretório no PATH (por exemplo, /usr/local/bin/ )?

EDITAR:

Desculpe, esqueci de mencionar que isso seria no Ubuntu para esse servidor específico.

EDIT 2:

Grande parte da coloração está sendo feita através do meu .bashrc , que está olhando para /usr/bin/dircolors , mas afeta apenas a saída dos meus comandos executados ( ls etc.) e não o comportamento dos autocompletes.

Isso é o que eu tenho no meu .bashrc no momento, que eu admito que foi descaradamente roubado de algum tópico do tipo "mostre-nos seu bashrc" em algum lugar.

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
force_color_prompt=yes

if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
        # We have color support; assume it's compliant with Ecma-48
        # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
        # a case would tend to support setf rather than setaf.)
        color_prompt=yes
    else
        color_prompt=
    fi
fi

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[3[01;32m\]\u@\h\[3[00m\]:\[3[01;34m\]\w\[3[00m\$
    else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls='ls -h --color=auto'
    #alias dir='dir --color=auto'
    #alias vdir='vdir --color=auto'
    alias grep='grep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias egrep='egrep --color=auto'
fi

EDIT 3:

Exemplo de comportamentos alterados de links simbólicos:

raxml e prunier são links simbólicos anteriormente azuis.

No entanto, a saída de autocomplete acima permanece incolor para qualquer link simbólico (tf como exemplo)

    
por Joe Healey 05.07.2016 / 15:49

1 resposta

1

O GNU ls permite escolher entre colorir arquivos pelo seu tipo ou (se um determinado tipo não estiver colorido) por um padrão. Isso é feito pelo programa dircolors , que possui um banco de dados interno de tipos, padrões e cores. ls não se importa com o caminho do diretório em si. O aspecto de "onde eles se referem a" não é feito facilmente com esse programa. Links simbólicos versus arquivos regulares é fácil.

Você pode modificar o banco de dados com mais facilidade imprimindo-o em um arquivo usando

dircolors -p >myfile

Dependendo do sistema, a inicialização do seu shell pode procurar por /etc/DIRCOLORS ). Depois de editá-lo, use dircolors para atribuir um valor a LS_COLORS :

eval 'dircolors myfile'

O manual de configuração dir_colors descreve o banco de dados e menciona o recurso que você pode alterar:

LINK color-sequence
Specifies the color used for a symbolic link.

ou no banco de dados impresso (padrão)

LINK 01;36 # symbolic link. (If you set this to 'target' instead of a
 # numerical value, the color is as for the file pointed to.)

O exemplo combina negrito e ciano . Você pode usar uma combinação de cores diferente modificando essa linha. (A propósito, a página de manual dir_colors refere-se a "brilhante": ISO 6429 diz negrito ).

bash não usa ls para preenchimento automático e ls é separado de bash . No entanto, um recurso equivalente foi adicionado em 2014 para bash , que usa a mesma variável LS_COLORS para informar quais cores podem ser exibidas. Esse é um recurso do bash 4.3, conforme mostrado no manual do bash :

colored-stats
If set to 'on', Readline displays possible completions using different colors to indicate their file type. The color definitions are taken from the value of the LS_COLORS environment variable. The default is 'off'.

Para usá-lo, adicione

set colored-stats on

para o seu arquivo .inputrc .

Leitura adicional:

por 05.07.2016 / 23:20