XDG_DATA_DIRS에 중복된 경로가 포함되어 있습니다. 어떻게 수정하나요?

XDG_DATA_DIRS에 중복된 경로가 포함되어 있습니다. 어떻게 수정하나요?

저는 Arch Linux와 KDE를 실행하고 있으며 MIME 유형 파일 연결에 대해 배우고 싶습니다.

내 시스템을 조사하는 동안 다음 문제를 발견했습니다.

$ echo $XDG_DATA_DIRS
/usr/share:/usr/share:/usr/local/share

경로가 /usr/share중복된다는 점에 유의하세요. 이 문제를 해결하는 방법과 해결 방법을 알고 싶습니다.

/usr/local/share/applications/ 또한 내 시스템에는 " 환경 변수에서 경로를 제거 할 수 있습니까?"라는 메시지가 없습니다. $XDG_DATA_DIRS그렇다면 어떻게 해야 합니까?

나는 최종 결과가 다음과 같아야 한다고 생각합니다.

$ echo $XDG_DATA_DIRS
/usr/share

다음은 몇 가지 문제 해결 정보입니다. 루트로 실행할 때는 이 경로를 볼 수 없습니다. 이는 표준 출력을 생성하지 않습니다.

# echo $XDG_DATA_DIRS

내 컴퓨터의 일반 사용자 계정에서 다음 명령은 표준 출력을 생성하지 않고 다음을 반환합니다 1.

$ grep -r XDG_DATA_DIRS /etc/profile.d/

이 검색에서는 바이너리 파일 place.sqlite(Firefox 프로필에 있음)를 제외하고 일치하는 항목을 찾지 못했습니다.

find /home/myuser -mount -type f -exec grep -r XDG_DATA_DIRS= {} +

이것은 또한 표준 출력을 생성하지 않습니다.

grep -r XDG_DATA_DIRS /etc/

지금까지 내가 찾은 유일한 일치 항목은 다음과 같습니다.

# grep -r XDG_DATA_DIRS= /usr
/usr/share/ECM/kde-modules/prefix.sh.cmake:export XDG_DATA_DIRS=@KDE_INSTALL_FULL_DATADIR@:${XDG_DATA_DIRS:-/usr/local/share/:/usr/share/}

그래서...

pacman -F /usr/share/ECM/kde-modules/prefix.sh.cmake
usr/share/ECM/kde-modules/prefix.sh.cmake is owned by extra/extra-cmake-modules 5.66.0-1

Arch Linux - extra-cmake-modules 5.66.0-1 (모든)https://www.archlinux.org/packages/extra/any/extra-cmake-modules/

이 가방이 내 무언극 유형의 연관성을 망치지 않기를 바랍니다...

다른 장치에 Arch를 새로 설치한 새 사용자 계정에서는 다음 세 가지 명령이 표준 출력을 생성하지 않습니다.

echo $XDG_DATA_DIRS
grep -r XDG_DATA_DIRS /etc/profile.d/
grep -r XDG_DATA_DIRS= /usr

답변1

또한 내 시스템에는 /usr/local/share/applications/가 없습니다. $XDG_DATA_DIRS 환경 변수에서 이 경로를 제거할 수 있습니까?

/usr/local/share/applications$XDG_DATA_DIRS붙여넣은 값에는 없으므로 존재하지 않는 값을 삭제할 필요는 없습니다.

grep -r XDG_DATA_DIRS /usr 경우

XDG_DATA_DIRS가 여러 번 나타나는 것을 볼 수 있습니다.

이 가방이 내 무언극 유형의 연관성을 망치지 않기를 바랍니다...

아니요, 아무 것도 엉망이 되지 않습니다. 또한 이 디렉토리만 검색합니다.

다른 장치에 Arch를 새로 설치한 새 사용자 계정에서 다음 세 가지 명령은 표준 출력을 생성하지 않습니다.

오히려 다른 시스템에서는 다른 값을 얻습니다. 설치한 패키지와 해당 특정 사용자에 대해 정의한 환경 변수는 데이터 파일을 검색할 디렉터리를 정의합니다. 동일한 값이 두 번 정의되면 두 번 나타납니다. 때로는 패키지가 함께 작동하지 않기 때문에 이상한 점은 없습니다. grep /usr/, /opt그리고 $HOME당신은 어딘가에서 범인을 찾을 것입니다. 그렇지 않다면 grep /;)

답변2

쉘을 사용하는 경우 zsh다음을 추가할 수 있습니다 ~/.zshrc.

typeset -UT XDG_DATA_DIRS xdg_data_dirs

그런 다음 $XDG_DATA_DIRS스칼라 변수가 T연결 되어 $xdg_data_dirs작업이 더 쉬워지고 요소가 U고유하게 설정됩니다 -U.

그런 다음 존재하지 않는 구성 요소를 제거하려면 다음을 추가할 수 있습니다.

xdg_data_dirs=($^xdg_data_dirs(N-/))

실제 디렉터리가 아닌 구성 요소가 제거됩니다( /심볼릭 링크 확인( -) 후).

답변3

Bash에서 중복되거나 존재하지 않는 디렉토리를 제거하려면 다음을 수행하십시오.

#!/usr/bin/env bash

XDG_DATA_DIRS=/usr/share:/usr/share:/usr/local/share
IFS=: read -ra xdg_data_dirs <<< "$XDG_DATA_DIRS"
declare -p xdg_data_dirs
for d in "${xdg_data_dirs[@]}"; do
    test -d "$d" || continue
    [[ :$result: != *:$d:* ]] || continue
    result+="${result+:}$d"
done
XDG_DATA_DIRS=$result

홈 디렉토리에서 검색하셨나요?

답변4

XDG_DATA_DIRS의 /usr/share와 중복되는 /usr/bin/x-session-manager 및 /usr/bin/startxfce4를 확인하세요.

관련 정보