Come utilizzare directory e percorsi XDG in Bash?


9

Mi chiedo come l'accesso non solo le variabili definite in ~/.config/user-dirs.dirscon xdg-user-dir, per esempio "$(xdg-user-dir VIDEOS)", ma anche le seguenti variabili standard:

  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

A tale scopo, nel mio ~/.bash_loginfile faccio quanto segue :

# 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

Esiste un meccanismo per accedere alla suddetta directory e alle variabili di percorso diverse dalle variabili della directory utente definite dalla specifica della struttura di directory "XDG"?


1
In realtà è un numero:XDG_RUNTIME_DIR:-"/run/user/$UID"
Tom Hale,

Risposte:


4

Queste variabili di ambiente sono tutte facoltative. Se non sono impostati, lo script deve sostituire i valori predefiniti indicati nella specifica stessa.

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

2
Questa opzione è uno dei motivi principali per cui li definisco una volta come variabili di ambiente perché non desidero ripetere il valore predefinito su ogni "${XDG_CACHE_HOME:-~/.cache}"accesso. In modo ottimale, dovrebbe esistere un meccanismo simile a quello previsto per "$(xdg-user-dir VIDEOS)"fornire implicitamente quel valore predefinito. In questo modo non devo ricordare il valore predefinito per ogni singola variabile XDG.
Tim Friske,

3
@Tim Friske: Nota che "${XDG_CACHE_HOME:-~/.cache}"non è corretto, si dovrebbe usare "${XDG_CACHE_HOME:-$HOME/.cache}"invece.
Flimm,

0

Più i valori predefiniti:

man xdg-user-dir=> VEDERE ANCHE: xdg-user-dirs-update(1)

man xdg-user-dirs-update=> VEDERE ANCHE: user-dirs.defaults(5)

man user-dirs.defaults=> user-dirs.defaultsIn prima XDG_CONFIG_DIRS(default: /etc/xdg)

Così:

read -r -d : <<<"${XDG_CONFIG_DIRS:=/etc/xdg}" XDG_USER_DIRS_DEFAULTS
XDG_USER_DIRS_DEFAULTS+=/user-dirs.defaults
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.