zsh의 dircolors: 인식할 수 없는 키워드: MULTIHARDLINK, RESET 및 CAPABILITY

zsh의 dircolors: 인식할 수 없는 키워드: MULTIHARDLINK, RESET 및 CAPABILITY

나는 얻으려고 노력하고있다햇볕에 말린내 터미널에서 사용되는 색상 테마입니다. 설명을 읽었습니다여기하지만 다음과 같은 dircolors 오류가 발생합니다.

dircolors: `/home/avazquez/.dircolors_zsh':90: unrecognized keyword RESET
dircolors: `/home/avazquez/.dircolors_zsh':94: unrecognized keyword MULTIHARDLINK
dircolors: `/home/avazquez/.dircolors_zsh':103: unrecognized keyword CAPABILITY

실행 시간:

if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
fi

.zshrczsh(최신 버전)에서( Ubuntu ssh -X에서 원격으로 액세스합니다 gnome-terminal).

문제의 파일 경로 .dircolors여기혼란스러운 줄은 특별한 파일 정의인 것 같습니다.

## Special files

NORMAL 00;38;5;244 # no color code at all
#FILE 00 # regular file: use no color at all
RESET 0 # reset to "normal" color
DIR 00;38;5;33 # directory 01;34
LINK 01;38;5;37 # 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 48;5;230;38;5;136;01 # pipe
SOCK 48;5;230;38;5;136;01 # socket
DOOR 48;5;230;38;5;136;01 # door
BLK 48;5;230;38;5;244;01 # block device driver
CHR 48;5;230;38;5;244;01 # character device driver
ORPHAN 48;5;235;38;5;160 # symlink to nonexistent file, or non-stat'able file
SETUID 48;5;160;38;5;230 # file that is setuid (u+s)
SETGID 48;5;136;38;5;230 # file that is setgid (g+s)
CAPABILITY 30;41 # file with capability
STICKY_OTHER_WRITABLE 48;5;64;38;5;230 # dir that is sticky and other-writable (+t,o+w)
OTHER_WRITABLE 48;5;235;38;5;33 # dir that is other-writable (o+w) and not sticky
STICKY 48;5;33;38;5;230 # dir with the sticky bit set (+t) and not other-writable
# This is for files with execute permission:
EXEC 01;38;5;64

답변1

그것 은 이것 과 거의 관련 이 없습니다 zsh. zsh색상 완성은 GNU처럼 지원됩니다 ls(예:파란색디렉토리의 경우,녹색실행 파일의 경우...), GNU와 동일한 구성 지시문을 지원합니다 ls.

GNU ls색상 구성은 LS_COLORS환경 변수를 통해 수행됩니다. 이 변수가 포함되면 ln=01;36심볼릭 링크가 다음 형식으로 렌더링된다는 의미입니다.두꺼운 청록색( 36전경의 청록색은 ANSI 색상 코드이며 01굵은 글씨입니다.)

에서도 zsh같은 일을 할 수 있습니다:

zstyle ':completion:*' list-colors 'ln=01;36'

실제로는 일반적으로 다음을 zsh사용하여 색상 완성을 구성합니다.

zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}

따라서 zsh색상 완성은 GNU ls와 동일한 방식으로 작동합니다.

변수의 내용을 더 쉽게 작성할 수 있도록 LS_COLORSGNU에는 ls이 명령이 제공됩니다 dircolors. 이 명령은 더 자세한 내용이 포함된 구성 파일을 입력으로 사용하고(구성 파일에는 환경 변수와 같은 공간 제한이 없기 때문에) LS_COLORS터미널에 적합한 변수의 해당 내용을 생성합니다.

위에는 다음이 있습니다.

LINK 01;38;5;37

0138;5;37여전히 굵게 표시되어 있지만 88색 또는 256색을 지원하는 단말기의 확장 색상 모드에 대한 사양 입니다 .xterm

이것은 전경색 37로, rgb:00/af/afANSI 색상 6의 기본 색상( cyan3적어도 내 경우에는 xterm여기 rgb:00/cd/cd)보다 약간 더 어두운 청록색( ) 색상입니다.

~$ tput setaf 37 | sed l
\033[38;5;37m$

그 이후 dircolors에는 ln=38;5;37.

MULTIHARDLINK 00여러 개의 하드 링크가 있는 파일이 기본 색상으로 렌더링된다는 규정 도 있습니다 . 이는 로 변환 mh=00됩니다 $LS_COLORS.

ls그러나 이는 비교적 새로운 버전의 / 에서 도입되었습니다 dircolors. 원래는 HARDLINK/ 였지만 2009년 coreutils 7.5에서는 / 가 더 정확한 표현 선택이었기 때문에 이름이 / hl로 변경되었습니다 .MULTIHARDLINKmh

이전 버전을 사용하고 있는 것 같습니다 dircolors. 두 가지 모두 zsh지원 되지 않으며(비록 불평하지 않고 무시하지만) 기본 색상으로 설정되어 있으므로 해당 줄을 제거하는 것이 좋습니다.hlmh

RESET/ rs는 coreutils 6.11에 추가되었지만 둘 다 지원되지 않습니다 zsh.

CAPABILITY/는 cacoreutils 7.0에 추가되었지만 둘 다 지원되지 않습니다 zsh.

지원되지 않는 항목이 더 있을 수 있지만 zsh( info zsh 'The zsh/complist Module'자세한 내용 참조) zsh지원하지 않는 항목은 무시하세요.

당신이 받고 있는 오류는 에서 발생합니다 . 이는 파일을 작성한 사람이 당신보다 최신 버전의 coreutils( 및 를 포함한 GNU 유틸리티 제품군)을 가지고 있다는 dircolors것을 의미합니다 . 파일에서 지원되지 않는 줄을 삭제하면 됩니다.dircolorslsdircolors

답변2

이것이 작동하려면 zsh다음을 추가해야 합니다:

alias ls='ls --color=auto'

github에도 뭔가 있어요.zshrc

관련 정보