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


9

我不知道如何访问不仅在定义的变量~/.config/user-dirs.dirsxdg-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
它实际上是一个数字:XDG_RUNTIME_DIR:-"/run/user/$UID"
汤姆·黑尔

Answers:


4

这些环境变量都是可选的。如果未设置它们,那么您的脚本必须替换规范本身中给出的默认值。

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

2
这种可选性是我一次将它们定义为环境变量的主要原因之一,因为我不想在每次"${XDG_CACHE_HOME:-~/.cache}"访问时都重复默认值。理想情况下,应该存在与"$(xdg-user-dir VIDEOS)"隐式提供默认值相似的机制。这样,我不必记住每个XDG变量的默认值。
蒂姆·弗里斯克

3
@Tim Friske:注意这"${XDG_CACHE_HOME:-~/.cache}"是不正确的,应该"${XDG_CACHE_HOME:-$HOME/.cache}"改用。
Flimm 2013年

0

加上默认值:

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.