Bagaimana cara memanfaatkan direktori dan jalur XDG di Bash?

9

Saya ingin tahu bagaimana mengakses tidak hanya variabel yang didefinisikan ~/.config/user-dirs.dirsdengan xdg-user-dir, misalnya "$(xdg-user-dir VIDEOS)", tetapi juga variabel standar berikut:

  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

Untuk itu saya melakukan hal berikut dalam ~/.bash_loginfile saya :

# 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

Apakah ada mekanisme untuk mengakses direktori dan variabel path di atas selain variabel direktori pengguna yang ditentukan oleh spesifikasi struktur direktori "XDG"?

Tim Friske
sumber
1
Ini sebenarnya nomor:XDG_RUNTIME_DIR:-"/run/user/$UID"
Tom Hale

Jawaban:

4

Semua variabel lingkungan itu adalah opsional. Jika tidak disetel maka skrip Anda harus menggantikan nilai default yang diberikan dalam spesifikasi itu sendiri.

someprog --cachedir "${XDG_CACHE_HOME:-$HOME/.cache}"
Ignacio Vazquez-Abrams
sumber
2
Opsionalitas ini adalah salah satu alasan utama mengapa saya mendefinisikannya sekali sebagai variabel lingkungan karena saya tidak ingin mengulang nilai default pada setiap "${XDG_CACHE_HOME:-~/.cache}"akses. Secara optimal harus ada mekanisme yang sama seperti ada dengan "$(xdg-user-dir VIDEOS)"memberikan nilai default secara implisit. Dengan begitu saya tidak harus mengingat nilai default untuk setiap variabel XDG.
Tim Friske
3
@Tim Friske: Perhatikan bahwa "${XDG_CACHE_HOME:-~/.cache}"ini tidak benar, orang harus menggunakannya "${XDG_CACHE_HOME:-$HOME/.cache}".
Flimm
0

Ditambah standarnya:

man xdg-user-dir=> LIHAT JUGA: xdg-user-dirs-update(1)

man xdg-user-dirs-update=> LIHAT JUGA: user-dirs.defaults(5)

man user-dirs.defaults=> user-dirs.defaultsDi bawah pertama XDG_CONFIG_DIRS(default: /etc/xdg)

Begitu:

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