如何在 Bash 中使用 XDG 目录和路径?

如何在 Bash 中使用 XDG 目录和路径?

~/.config/user-dirs.dirs我想知道如何不仅访问with中定义的变量xdg-user-dir,例如"$(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

相关内容