여기에서 "dircolors"가 "eval ``dircolors`"`"를 대체할 수 있나요?

여기에서 "dircolors"가 "eval ``dircolors`"`"를 대체할 수 있나요?

ls 명령의 색상을 설정하기 위해 .bashrc를 확인하다가 이것을 발견했습니다.

export SHELL='/bin/bash'
 export LS_OPTIONS='--color=auto'
 eval "`dircolors`"
 alias ls='ls $LS_OPTIONS'

dircolorswith 대신 사용하면 문제가 있나요 eval? 차이점은 무엇입니까?

답변1

작동하지도 작동하지도 않습니다 eval dircolors.dircolors

당신에게 필요한 것은:

eval "$(dircolors)"

(또는 고대 형태 eval "`dircolors`")

즉, 평가해야 할 결과입니다 dircolors. dircolors셸에서 평가된 출력 코드는 다음과 같습니다.

LS_COLORS='...'
export LS_COLORS

평가하려는 코드입니다. eval dircolors마찬가지로 출력이 리디렉션되지 않는 경우에만 실행 dircolors되므로 dircolors위의 셸 코드는 결국 표시되고 어떤 셸에서도 평가되지 않습니다.

또한 쉘 구문에 옵션 목록을 $LS_OPTIONS포함시키려는 경우(예: this 와 같은 것을 허용 ) 다음과 같이 정의해야 합니다.ls--exclude='*~'

ls() {
  eval 'command ls '"$LS_OPTIONS"' "$@"'
}

또는 다음을 사용하여 zsh:

alias ls='ls "${(Q@)${(z)LS_OPTIONS}}"'

공백으로 구분된 옵션 목록을 포함하려면 bash 4.4+를 사용하세요.

ls() {
  local IFS=' '
  local -
  set -o noglob
  command ls $LS_OPTIONS "$@"
}

또는 다음을 사용하여 zsh:

alias ls='ls ${(s: :)LS_OPTIONS}'

관련 정보