alterar o comportamento de LS_COLORS

1

Estou tentando modificar o comportamento LS_COLORS . Atualmente (digamos para sh ou py ), muda de cor dependendo se é executável ou não, como mostrado aqui

Mas,queroquetodoomeuscript,executávelounão,tenhaexecutáveisdamesmacoregeradosporcomputador,porexemploa.outetctemacordefinidaporexemLS_COLOR

Estaéasaídadedircolors-p:

#Configurationfilefordircolors,autilitytohelpyousetthe#LS_COLORSenvironmentvariableusedbyGNUlswiththe--coloroption.#Copyright(C)1996-2014FreeSoftwareFoundation,Inc.#Copyinganddistributionofthisfile,withorwithoutmodification,#arepermittedprovidedthecopyrightnoticeandthisnoticearepreserved.#ThekeywordsCOLOR,OPTIONS,andEIGHTBIT(honoredbythe#slackwareversionofdircolors)arerecognizedbutignored.#Below,thereshouldbeoneTERMentryforeachtermtypethatiscolorizableTERMEtermTERMansiTERMcolor-xtermTERMcon132x25TERMcon132x30TERMcon132x43TERMcon132x60TERMcon80x25TERMcon80x28TERMcon80x30TERMcon80x43TERMcon80x50TERMcon80x60TERMcons25TERMconsoleTERMcygwinTERMdttermTERMeterm-colorTERMgnomeTERMgnome-256colorTERMhurdTERMjfbtermTERMkonsoleTERMktermTERMlinuxTERMlinux-cTERMmach-colorTERMmach-gnu-colorTERMmltermTERMputtyTERMputty-256colorTERMrxvtTERMrxvt-256colorTERMrxvt-cygwinTERMrxvt-cygwin-nativeTERMrxvt-unicodeTERMrxvt-unicode-256colorTERMrxvt-unicode256TERMscreenTERMscreen-256colorTERMscreen-256color-bceTERMscreen-bceTERMscreen-wTERMscreen.EtermTERMscreen.rxvtTERMscreen.linuxTERMstTERMst-256colorTERMterminatorTERMvt100TERMxtermTERMxterm-16colorTERMxterm-256colorTERMxterm-88colorTERMxterm-colorTERMxterm-debian#Belowarethecolorinitstringsforthebasicfiletypes.Acolorinit#stringconsistsofoneormoreofthefollowingnumericcodes:#Attributecodes:#00=none01=bold04=underscore05=blink07=reverse08=concealed#Textcolorcodes:#30=black31=red32=green33=yellow34=blue35=magenta36=cyan37=white#Backgroundcolorcodes:#40=black41=red42=green43=yellow44=blue45=magenta46=cyan47=white#NORMAL00#nocolorcodeatall#FILE00#regularfile:usenocoloratallRESET0#resetto"normal" color
DIR 01;34 # directory
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.)
MULTIHARDLINK 00 # regular file with more than one link
FIFO 40;33 # pipe
SOCK 01;35 # socket
DOOR 01;35 # door
BLK 40;33;01 # block device driver
CHR 40;33;01 # character device driver
ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file
SETUID 37;41 # file that is setuid (u+s)
SETGID 30;43 # file that is setgid (g+s)
CAPABILITY 30;41 # file with capability
STICKY_OTHER_WRITABLE 30;42 # dir that is sticky and other-writable (+t,o+w)
OTHER_WRITABLE 34;42 # dir that is other-writable (o+w) and not sticky
STICKY 37;44 # dir with the sticky bit set (+t) and not other-writable
# This is for files with execute permission:
EXEC 01;32
# List any file extensions like '.gz' or '.tar' that you would like ls
# to colorize below. Put the extension, a space, and the color init string.
# (and any comments you want to add after a '#')
# If you use DOS-style suffixes, you may want to uncomment the following:
#.cmd 01;32 # executables (bright green)
#.exe 01;32
#.com 01;32
#.btm 01;32
#.bat 01;32
# Or if you want to colorize scripts even if they do not have the
# executable bit actually set.
#.sh 01;32
#.csh 01;32
 # archives or compressed (bright red)
.tar 01;31
.tgz 01;31
.arc 01;31
.arj 01;31
.taz 01;31
.lha 01;31
.lz4 01;31
.lzh 01;31
.lzma 01;31
.tlz 01;31
.txz 01;31
.tzo 01;31
.t7z 01;31
.zip 01;31
.z 01;31
.Z 01;31
.dz 01;31
.gz 01;31
.lrz 01;31
.lz 01;31
.lzo 01;31
.xz 01;31
.bz2 01;31
.bz 01;31
.tbz 01;31
.tbz2 01;31
.tz 01;31
.deb 01;31
.rpm 01;31
.jar 01;31
.war 01;31
.ear 01;31
.sar 01;31
.rar 01;31
.alz 01;31
.ace 01;31
.zoo 01;31
.cpio 01;31
.7z 01;31
.rz 01;31
.cab 01;31
# image formats
.jpg 01;35
.jpeg 01;35
.gif 01;35
.bmp 01;35
.pbm 01;35
.pgm 01;35
.ppm 01;35
.tga 01;35
.xbm 01;35
.xpm 01;35
.tif 01;35
.tiff 01;35
.png 01;35
.svg 01;35
.svgz 01;35
.mng 01;35
.pcx 01;35
.mov 01;35
.mpg 01;35
.mpeg 01;35
.m2v 01;35
.mkv 01;35
.webm 01;35
.ogm 01;35
.mp4 01;35
.m4v 01;35
.mp4v 01;35
.vob 01;35
.qt 01;35
.nuv 01;35
.wmv 01;35
.asf 01;35
.rm 01;35
.rmvb 01;35
.flc 01;35
.avi 01;35
.fli 01;35
.flv 01;35
.gl 01;35
.dl 01;35
.xcf 01;35
.xwd 01;35
.yuv 01;35
.cgm 01;35
.emf 01;35
# http://wiki.xiph.org/index.php/MIME_Types_and_File_Extensions
.axv 01;35
.anx 01;35
.ogv 01;35
.ogx 01;35
# audio formats
.aac 00;36
.au 00;36
.flac 00;36
.m4a 00;36
.mid 00;36
.midi 00;36
.mka 00;36
.mp3 00;36
.mpc 00;36
.ogg 00;36
.ra 00;36
.wav 00;36
# http://wiki.xiph.org/index.php/MIME_Types_and_File_Extensions
.axa 00;36
.oga 00;36
.spx 00;36
.xspf 00;36

Também estou definindo LS_COLORS em meu ~/.bashrc :

  LS_COLORS='no=1:di=1;38;2;66;133;244:ln=09;32:pi=40;32:so=01;35:bd=40;33;01:cd=34;33;01:or=34;33;01:ex=01;38;2;149;138;221:*.in=01;34:*.sh=1;38;2;0;215;95'

Como você pode ver na imagem, a cor ex está substituindo a cor do tipo de arquivo sh quando o rename.sh é definido como executável.

    
por BaRud 21.06.2015 / 12:52

1 resposta

0

Para ser pragmático, você sempre pode substituir seu ls por uma pequena função shell que pós-processa a saída de ls . ls geralmente já é um alias de shell (para ver o uso: type ls ). Embora você possa usar o mesmo nome para a função, É preferível usar um nome ligeiramente diferente como ll para evitar qualquer ambiguidade. Você logo se acostuma a digitar ll em vez de ls.

Aqui está uma função de shell (colocar, por exemplo, em seu ~ / .bash_profile). Usa Perl para procurar as seqüências de código de escape ansi que definir a cor em torno de um nome do arquivo terminando em .sh e os substitui pela seqüência desejada. Você pode ver esses códigos canalizando sua saída ls --color através de cat -vet . Você pode precisar editar este script se você não vê a mesma sequência que eu fiz. Além disso, o ls pode não reagir da mesma forma, já que a saída é um pipe e não um tty.

ll(){
    /bin/ls --color "$@" |
    perl -p -e '$want = "1;38;2;0;215;95";
                s/(\e\[)([0-9;]*)(m[^\e]*\.sh\e\[0m$)/$1$want$3/;' 
}

No comando perl substitute (s / pattern / replacement string /) \e é o caractere de escape, \[ é um colchete esquerdo ([), [0-9;]* é qualquer sequência de dígitos e (;), [^\e]* são quaisquer caracteres que não incluam escape, \. é um ponto (.) e $ é o final da linha. () são usados para capturar o peças correspondentes em $ 1, $ 2 e $ 3, usadas na peça de reposição.

Se você realmente quiser o nome ls , mantenha a função ll e use alias ls=ll , para que ela funcione apenas em shells interativos.

    
por 21.06.2015 / 17:32