Làm thế nào để sử dụng các thư mục và đường dẫn XDG trong Bash?


9

Tôi tự hỏi làm thế nào để truy cập không chỉ các biến quy định tại ~/.config/user-dirs.dirsvới xdg-user-dir, ví dụ "$(xdg-user-dir VIDEOS)", mà còn các biến tiêu chuẩn sau đây:

  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

Vì mục đích đó, tôi làm như sau trong ~/.bash_logintập tin của mình :

# 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

Có một cơ chế để truy cập vào các biến thư mục và đường dẫn ở trên ngoài các biến thư mục người dùng được xác định bởi đặc tả cấu trúc thư mục "XDG" không?


1
Đó thực sự là một con số:XDG_RUNTIME_DIR:-"/run/user/$UID"
Tom Hale

Câu trả lời:


4

Những biến môi trường là tất cả tùy chọn. Nếu chúng không được đặt thì tập lệnh của bạn phải thay thế các giá trị mặc định được cung cấp trong chính đặc tả .

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

2
Tính tùy chọn này là một trong những lý do chính khiến tôi xác định chúng một lần là biến môi trường vì tôi không muốn lặp lại giá trị mặc định cho mỗi lần "${XDG_CACHE_HOME:-~/.cache}"truy cập. Tối ưu hóa nên tồn tại một cơ chế tương tự như có với "$(xdg-user-dir VIDEOS)"việc cung cấp giá trị mặc định đó hoàn toàn. Bằng cách đó, tôi không phải nhớ giá trị mặc định cho từng biến XDG.
Tim Friske

3
@Tim Friske: Lưu ý "${XDG_CACHE_HOME:-~/.cache}"là không chính xác, người ta nên sử dụng "${XDG_CACHE_HOME:-$HOME/.cache}"thay thế.
Flimm

0

Cộng với mặc định:

man xdg-user-dir=> XEM CSONG: xdg-user-dirs-update(1)

man xdg-user-dirs-update=> XEM CSONG: user-dirs.defaults(5)

man user-dirs.defaults=> user-dirs.defaultsdưới đầu tiên XDG_CONFIG_DIRS(mặc định /etc/xdg:)

Vì thế:

read -r -d : <<<"${XDG_CONFIG_DIRS:=/etc/xdg}" XDG_USER_DIRS_DEFAULTS
XDG_USER_DIRS_DEFAULTS+=/user-dirs.defaults
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.