Bash에서 XDG 디렉토리와 경로를 사용하는 방법은 무엇입니까?

Bash에서 XDG 디렉토리와 경로를 사용하는 방법은 무엇입니까?

~/.config/user-dirs.dirsxdg-user-dir예를 들어 with 에 정의된 변수뿐만 "$(xdg-user-dir VIDEOS)"아니라 다음 표준 변수에도 액세스하는 방법을 알고 싶습니다 .

  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

이를 위해 ~/.bash_login파일에서 다음을 수행합니다.

# 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

"XDG" 디렉터리 구조 사양에 정의된 사용자 디렉터리 변수 외에 위 디렉터리 및 경로 변수에 액세스하는 메커니즘이 있습니까?

답변1

이러한 환경 변수는 선택 사항입니다. 설정되지 않은 경우 스크립트는 제공된 기본값을 바꿔야 합니다.사양그 자체.

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

답변2

나는 systemd-path이것이 널리 사용 가능하다고 생각하며 상황 인식 해결 및 적절한 폴백을 통해 경로를 얻는 데 사용될 수 있습니다.

$ systemd-path user-shared
/home/Xerkus/.local/share

$ HOME=/foo systemd-path user-shared
/foo/.local/share
$ XDG_DATA_HOME=/bar systemd-path user-shared
/bar

남성의 경우:

systemd-path는
시스템 및 사용자 경로를 쿼리하는 데 사용할 수 있습니다. 이 도구는 file-hierarchy(7)에 설명된 많은 경로를 쿼리 가능하게 만듭니다. 인수 없이 호출하면 알려진 경로 목록과 현재 값이 표시됩니다. ...

답변3

+ 기본값:

man xdg-user-dir=> 참조: xdg-user-dirs-update(1)

man xdg-user-dirs-update=> 참조: user-dirs.defaults(5)

man user-dirs.defaults=> user-dirs.defaults첫 번째 아래 XDG_CONFIG_DIRS(기본값 /etc/xdg: )

그래서:

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

관련 정보