LS_COLORS 동작 변경

LS_COLORS 동작 변경

나는 행동을 바꾸려고 노력하고 있습니다 LS_COLORS. 현재는 아래와 같이 실행 가능 여부에 따라 색상이 변경됩니다 (예: for sh또는 ).py내 터미널의 스크린샷은 하나는 실행 가능하고 다른 하나는 실행 가능하지 않습니다.

그러나 실행 가능 여부에 관계없이 모든 스크립트가 동일한 색상을 갖고 컴퓨터에서 생성된 실행 파일 등이 a.outLS_COLOR에서 ex로 정의된 색상을 갖기를 원합니다.

이것은 다음의 출력입니다 dircolors -p.

# Configuration file for dircolors, a utility to help you set the
# LS_COLORS environment variable used by GNU ls with the --color option.
# Copyright (C) 1996-2014 Free Software Foundation, Inc.
# Copying and distribution of this file, with or without modification,
# are permitted provided the copyright notice and this notice are preserved.
# The keywords COLOR, OPTIONS, and EIGHTBIT (honored by the
# slackware version of dircolors) are recognized but ignored.
# Below, there should be one TERM entry for each termtype that is colorizable
TERM Eterm
TERM ansi
TERM color-xterm
TERM con132x25
TERM con132x30
TERM con132x43
TERM con132x60
TERM con80x25
TERM con80x28
TERM con80x30
TERM con80x43
TERM con80x50
TERM con80x60
TERM cons25
TERM console
TERM cygwin
TERM dtterm
TERM eterm-color
TERM gnome
TERM gnome-256color
TERM hurd
TERM jfbterm
TERM konsole
TERM kterm
TERM linux
TERM linux-c
TERM mach-color
TERM mach-gnu-color
TERM mlterm
TERM putty
TERM putty-256color
TERM rxvt
TERM rxvt-256color
TERM rxvt-cygwin
TERM rxvt-cygwin-native
TERM rxvt-unicode
TERM rxvt-unicode-256color
TERM rxvt-unicode256
TERM screen
TERM screen-256color
TERM screen-256color-bce
TERM screen-bce
TERM screen-w
TERM screen.Eterm
TERM screen.rxvt
TERM screen.linux
TERM st
TERM st-256color
TERM terminator
TERM vt100
TERM xterm
TERM xterm-16color
TERM xterm-256color
TERM xterm-88color
TERM xterm-color
TERM xterm-debian
# Below are the color init strings for the basic file types. A color init
# string consists of one or more of the following numeric codes:
# Attribute codes:
# 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
# Text color codes:
# 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
# Background color codes:
# 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white
#NORMAL 00 # no color code at all
#FILE 00 # regular file: use no color at all
RESET 0 # reset to "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

또한 LS_COLORS내 설정 에는 다음이 있습니다 ~/.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'

이미지에서 볼 수 있듯이 rename.sh실행 가능으로 설정하면 ex 색상이 sh 파일 유형 색상보다 우선 적용됩니다.

답변1

ls실용성을 위해 언제든지 의 출력을 사후 처리하는 작은 셸 함수로 바꿀 수 있습니다 ls. ls일반적으로 이미 쉘 별명입니다(사용: 참조 type ls). 함수에 동일한 이름을 사용할 수 있지만 ll모호함을 피하기 위해 약간 다른 이름을 사용하는 것이 좋습니다 . ls 대신 ll을 입력하는 데 곧 익숙해질 것입니다.

이것은 그러한 쉘 함수입니다(예를 들어 ~/.bash_profile에 넣습니다). Perl을 사용하여 그것으로 끝나는 파일 이름 주위에 색상을 설정하는 ansi 이스케이프 코드 시퀀스를 찾고 .sh이를 원하는 시퀀스로 바꿉니다. 파이프된 출력을 통해 이러한 ls --color코드를 볼 수 있습니다 cat -vet. 나와 동일한 시퀀스가 ​​표시되지 않으면 이 스크립트를 편집해야 할 수도 있습니다. 또한 출력이 tty가 아닌 파이프이기 때문에 ls는 동일한 방식으로 반응하지 않을 수 있습니다.

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/;' 
}

Perl 대체 명령(s/pattern/replacement string/)에는 일련의 숫자인 왼쪽 대괄호([) 와 이스케이프를 포함하지 않는 문자인 (;) 인 \e이스케이프 문자가 있습니다. 점(.)이며 줄의 끝입니다. 일치하는 부품을 교체 부품용으로 $1, $2, $3로 캡처하는 데 사용됩니다.\[[0-9;]*[^\e]*\.$()

정말로 그 이름을 원한다면 ls함수를 유지 하고 대화형 셸에서만 작동하도록 ll사용하세요 .alias ls=ll

답변2

이 질문은 오래되었지만 여전히 수정을 거쳐 다시 컴파일되었습니다 ls. 다음은 몇 가지 추가 세부정보입니다.

운영 체제:쿠분투 23.04(우분투 변형) coreutils 버전:9.1

소스코드를 살펴보니, 특정 확장자가 실행파일이 아닌 일반 파일인지 만 ls확인 한다는 사실을 알게 되었습니다. 실행 파일에 대해 동일한 색상 검사를 수행할 수 있도록 LS_COLORS수정했습니다 .ls

다음과 같이 진행하세요:

  1. (deb-src 저장소를 활성화했는지 확인하십시오)
sudo apt install build-essential
sudo apt-get build-dep coreutils
apt-get source coreutils
cd coreutils-9.1

cdcoreutils 버전에 따라 명령을 변경 해야 할 수도 있습니다 .

  1. 어떤 편집기로든 엽니다 src/ls.c. 다음 줄을 검색하세요.
...
/* Check the file's suffix only if still classified as C_FILE.  */
ext = NULL;
if (type == C_FILE)
    {
...

수정할 줄은 다음 줄입니다.

if (type == C_FILE)

내 coreutils 소스 코드에서는 라인 1입니다. 5033, 내부 기능 get_color_indicator.

  1. 해당 줄을 다음과 같이 편집합니다.
if ((type == C_FILE) || (type == C_EXEC))

노트:왜 이렇게 하는지에 대해서는 해당 줄 위의 설명을 읽어보세요.

/* Check the file's suffix only if still classified as C_FILE.  */

위의 줄을 스크롤하면 파일이 C_FILE일반 파일인 경우에만 분류되는 것을 볼 수 있습니다. 실행파일, 다중 하드링크(다른 유형에서도 같은 줄이 보일 수 있음) 등의 파일은 로 분류되지 않습니다 C_FILE.

실행 파일은 다음과 같이 분류됩니다 C_EXEC. 이 줄을 수정하면 C_EXEC이 플래그가 설정된 파일이 다른 파일과 다른 색상을 사용할 수 있습니다 C_FILE.

C_MULTIHARDLINK필요한 경우 동일한 방식으로 다른 플래그(예:)를 추가 할 수도 있습니다 .

  1. 수정 된 ls.coreutils-9.1
./bootstrap
./configure

make clean
make -j $(nproc)

(보다이것명확하지 않은 경우 컴파일 단계에 답변해 주세요. )

  1. 이제 ls에 있는 새로 생성된 것을 사용하여 테스트 할 수 있습니다 src/ls. 수정에 대한 확신이 생기면 교체품 ls을 이동할 수 있습니다 . 사실은 이전 버전의 백업을 저장하고 싶었는데 그게 당신의 바람이군요.ls/bin/lsls

마지막 단계: 당신의 것을 수정 LS_COLORS하고 아름다움을 즐기세요 ls:-)

관련 정보