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を新しくインストールした新しいユーザーアカウントでは、次の3つのコマンドは標準出力を生成しません。

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を新しくインストールした新しいユーザーアカウントでは、次の3つのコマンドは標準出力を生成しません。

むしろ他のシステムでは異なる値を得る。インストールしたパッケージとその特定のユーザーに対して定義した環境変数は、データファイルを検索するディレクトリを定義します。同じ値が 2 回定義されると、2 回表示されます。時にはパッケージが一緒に動作しないので、奇妙なことはありません。そしてgrep /usr/、あなたはどこかで犯人を見つけるでしょう。そうでなければ;)/opt$HOMEgrep /

答え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を確認してください。

関連情報