¿Cómo utilizar directorios y rutas XDG en Bash?

9

Me pregunto cómo el acceso no sólo a las variables definidas en ~/.config/user-dirs.dirsla xdg-user-dir, por ejemplo "$(xdg-user-dir VIDEOS)", pero también las siguientes variables estándar:

  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

Para ello, hago lo siguiente en mi ~/.bash_loginarchivo:

# 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 algún mecanismo para acceder a las variables de ruta y directorio anteriores además de las variables de directorio de usuario definidas por la especificación de estructura de directorio "XDG"?

Tim Friske
fuente
1
En realidad es un número:XDG_RUNTIME_DIR:-"/run/user/$UID"
Tom Hale

Respuestas:

4

Esas variables de entorno son todas opcionales. Si no están configurados, su secuencia de comandos debe sustituir los valores predeterminados dados en la especificación misma.

someprog --cachedir "${XDG_CACHE_HOME:-$HOME/.cache}"
Ignacio Vazquez-Abrams
fuente
2
Esta opcionalidad es una de las razones principales por las que las defino una vez como variables de entorno porque no quiero repetir el valor predeterminado en cada "${XDG_CACHE_HOME:-~/.cache}"acceso. Óptimamente debería existir un mecanismo similar al que existe al "$(xdg-user-dir VIDEOS)"proporcionar ese valor predeterminado implícitamente. De esa manera no tengo que recordar el valor predeterminado para todas y cada una de las variables XDG.
Tim Friske
3
@Tim Friske: Tenga en cuenta que "${XDG_CACHE_HOME:-~/.cache}"es incorrecto, uno debería usar "${XDG_CACHE_HOME:-$HOME/.cache}"en su lugar.
Flimm
0

Además de los valores predeterminados:

man xdg-user-dir=> VER TAMBIÉN: xdg-user-dirs-update(1)

man xdg-user-dirs-update=> VER TAMBIÉN: user-dirs.defaults(5)

man user-dirs.defaults=> user-dirs.defaultsBajo primero XDG_CONFIG_DIRS(por defecto: /etc/xdg)

Entonces:

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