런처 스크립트를 사용하여 LS_COLORS 환경 변수를 설정하려고 합니다. 그러나 이 변수는 설정되지 않았습니다.
속도
다운로드됨LS_COLORS~/.dircolors로
다음에 추가TERM=xterm-newTerminalEmulator다른 곳에서는학기변수는 .dircolors에 정의되어 있습니다.
~/bin/ls에 실행 프로그램 스크립트를 만듭니다.
Shebang을 사용하여 이 실행 프로그램 스크립트를 채우고
eval
괄호 안의 문자열을 셸에 명령으로 전달하고exec
모든 프로세스를 다음으로 바꿉니다ls
.#!/bin/sh eval $(dircolors -b ~/.dircolors) exec /bin/ls "$@"
~/bin/ls
파일을 실행 가능 하게 만듭니다 .
dir_colors의 매뉴얼 페이지에는 다음과 같이 나와 있습니다.
일반적으로 여기에 사용되는 파일은 /etc/DIR_COLORS이며 홈 디렉터리의 .dir_colors 파일로 재정의될 수 있습니다.
시스템 전체 /etc/DIR_COLORS 스크립트만 사용하는 것을 고려하면 이것이 작동하지 않는 이유는 무엇입니까?
또한
또한 별칭을 다음 ls
으로 설정 했습니다.별칭 ls = "ls --color"아무것도 echo $LS_COLORS
표시되지 않습니다.
시스템 사양은 fedora28 및 bash입니다.
고쳐 쓰다
작업을 완료했지만 색상이 마음에 들지 않습니다. 기본값은 그뿐만 아니라 더 직관적입니다.LS_COLORS실행 파일과 심볼릭 링크를 구분하지 않으며 이는 중요한 요소입니다.
답변1
문서는 모호하지만 환경 변수를 설정하는 것만으로는 충분하지 않습니다. --color
옵션이 필요합니다. 옵션 값이 없는 경우 이는 --color=always
(대부분의 사람들이 기대하며 --color=auto
파이프라인에서 색상을 억제함)에 해당합니다.
--color
이 옵션을 처리하는 방법은 다음에서 확인할 수 있습니다 .ls의 소스 코드, 특히 변수print_with_color
그리고 그들의 상호작용LS_COLORS
.
그럼에도 불구하고 반환된 명령을 eval
평가하려면 명령이 필요하며 환경 변수는 에 있습니다 . 귀하의 예(추가된 옵션 포함 )는 bash와 dash 모두에서 작동합니다.export
dircolors
exec
--color
답변2
하위 쉘에서 dircolors를 실행하므로 변경 사항은 하위 쉘 내에서만 적용됩니다.
서브쉘은 $( ... )
이거 한번 해봐...
alias ls="dircolors -b ~/.dircolors && ls"