Wie verwende ich XDG-Verzeichnisse und -Pfade in Bash?

8

Ich frage mich, wie ich nicht nur auf die ~/.config/user-dirs.dirsmit xdg-user-dirz. B. definierten Variablen zugreifen kann "$(xdg-user-dir VIDEOS)", sondern auch auf die folgenden Standardvariablen:

  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

Zu diesem Zweck mache ich in meiner ~/.bash_loginDatei Folgendes :

# 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

Gibt es einen anderen Mechanismus für den Zugriff auf die oben genannten Verzeichnis- und Pfadvariablen als die in der Verzeichnisstrukturspezifikation "XDG" definierten Benutzerverzeichnisvariablen?

Tim Friske
quelle
1
Es ist eigentlich eine Zahl:XDG_RUNTIME_DIR:-"/run/user/$UID"
Tom Hale

Antworten:

4

Diese Umgebungsvariablen sind alle optional. Wenn sie nicht festgelegt sind, muss Ihr Skript die in der Spezifikation selbst angegebenen Standardwerte ersetzen .

someprog --cachedir "${XDG_CACHE_HOME:-$HOME/.cache}"
Ignacio Vazquez-Abrams
quelle
1
Diese Option ist einer der Hauptgründe, warum ich sie einmal als Umgebungsvariablen definiere, da ich den Standardwert nicht bei jedem "${XDG_CACHE_HOME:-~/.cache}"Zugriff wiederholen möchte . Optimalerweise sollte es einen ähnlichen Mechanismus geben wie bei "$(xdg-user-dir VIDEOS)"der impliziten Bereitstellung dieses Standardwerts. Auf diese Weise muss ich mich nicht an den Standardwert für jede einzelne XDG-Variable erinnern.
Tim Friske
3
@ Tim Friske: Beachten Sie, dass dies "${XDG_CACHE_HOME:-~/.cache}"falsch ist, sollte man "${XDG_CACHE_HOME:-$HOME/.cache}"stattdessen verwenden.
Flimm