Comment utiliser les répertoires et les chemins XDG dans Bash?

9

Je me demande comment accéder non seulement aux variables définies ~/.config/user-dirs.dirsavec xdg-user-dir, par exemple "$(xdg-user-dir VIDEOS)", mais aussi aux variables standard suivantes:

  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

À cet effet, je fais ce qui suit dans mon ~/.bash_logindossier:

# 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

Existe-t-il un mécanisme pour accéder aux variables de répertoire et de chemin ci-dessus autres que les variables de répertoire utilisateur définies par la spécification de structure de répertoire "XDG"?

Tim Friske
la source
1
C'est en fait un nombre:XDG_RUNTIME_DIR:-"/run/user/$UID"
Tom Hale

Réponses:

4

Ces variables d'environnement sont toutes facultatives. S'ils ne sont pas définis, votre script doit remplacer les valeurs par défaut données dans la spécification elle-même.

someprog --cachedir "${XDG_CACHE_HOME:-$HOME/.cache}"
Ignacio Vazquez-Abrams
la source
2
Cette option est l'une des principales raisons pour lesquelles je les définis une fois comme variables d'environnement car je ne veux pas répéter la valeur par défaut à chaque "${XDG_CACHE_HOME:-~/.cache}"accès. Idéalement, il devrait exister un mécanisme similaire à "$(xdg-user-dir VIDEOS)"celui de la fourniture implicite de cette valeur par défaut. De cette façon, je n'ai pas à me souvenir de la valeur par défaut pour chaque variable XDG.
Tim Friske
3
@Tim Friske: Notez que "${XDG_CACHE_HOME:-~/.cache}"c'est incorrect, il faut utiliser à la "${XDG_CACHE_HOME:-$HOME/.cache}"place.
Flimm
0

Plus les valeurs par défaut:

man xdg-user-dir=> VOIR AUSSI: xdg-user-dirs-update(1)

man xdg-user-dirs-update=> VOIR AUSSI: user-dirs.defaults(5)

man user-dirs.defaults=> user-dirs.defaultsSous le premier XDG_CONFIG_DIRS(par défaut: /etc/xdg)

Donc:

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