BashでXDGディレクトリとパスを使用する方法は?

BashでXDGディレクトリとパスを使用する方法は?

~/.config/user-dirs.dirsxdg-user-dirたとえば、withで定義されている変数だけでなく、"$(xdg-user-dir VIDEOS)"次の標準変数にアクセスする方法を知りたいと思います。

  1. XDG_CACHE_HOME:-$HOME/.cache
  2. XDG_CONFIG_HOME:-$HOME/.config
  3. XDG_DATA_HOME:-$HOME/.local/share
  4. XDG_RUNTIME_DIR:-"/run/user/$USER"
  5. XDG_CONFIG_DIRS:-/etc/xdg
  6. XDG_DATA_DIRS:-/usr/local/share:/usr/share

これを行うには、~/.bash_loginファイルで次のようにします。

# Define standard directories.
declare -gx XDG_CACHE_HOME=~/.cache
declare -gx XDG_CONFIG_HOME=~/.config
declare -gx XDG_DATA_HOME=~/.local/share
declare -gx XDG_RUNTIME_DIR="/run/user/$USER"
declare -gx XDG_CONFIG_DIRS="$(IFS=: path /etc/xdg)"
declare -gx XDG_DATA_DIRS="$(IFS=: path /usr/local/share:/usr/share)"
# Source supplementary directories to export or overwrite existing standard ones.
declare a="$XDG_CONFIG_HOME/user-dirs.dirs"
if [[ -e $a ]]; then
  source "$a"
  declare b=""
  for b in ${!XDG_*}; do
    if [[ $b =~ ^XDG_[_[:alnum:]]+_DIR$ ]]; then
      declare -gx "$b"
    fi
  done
fi

「XDG」ディレクトリ構造仕様で定義されているユーザーディレクトリ変数に加えて、上記のディレクトリとパス変数にアクセスするメカニズムはありますか?

答え1

これらの環境変数はオプションです。設定されていない場合、スクリプトは指定されたデフォルト値を置き換える必要があります。仕様それ自体。

someprog --cachedir "${XDG_CACHE_HOME:-$HOME/.cache}"

答え2

私はsystemd-pathこれが広く利用可能であると考えており、状況認識の解決と適切なフォールバックを介してパスを取得するために使用できます。

$ systemd-path user-shared
/home/Xerkus/.local/share

$ HOME=/foo systemd-path user-shared
/foo/.local/share
$ XDG_DATA_HOME=/bar systemd-path user-shared
/bar

男性の場合:

systemd-path は、
システムとユーザーのパスを照会するために使用できます。このツールは、file-hierarchy(7)で説明されている多くのパスをクエリ可能にします。引数なしで呼び出すと、既知のパスのリストと現在の値が表示されます。 ...

答え3

+デフォルト:

man xdg-user-dir=>参照:xdg-user-dirs-update(1)

man xdg-user-dirs-update=>参照:user-dirs.defaults(5)

man user-dirs.defaults=>user-dirs.defaults最初の下XDG_CONFIG_DIRS(デフォルト/etc/xdg:)

だから:

read -r -d : <<<"${XDG_CONFIG_DIRS:=/etc/xdg}" XDG_USER_DIRS_DEFAULTS
XDG_USER_DIRS_DEFAULTS+=/user-dirs.defaults

関連情報