Como utilizar diretórios e caminhos XDG no Bash?

9

Gostaria de saber como acessar não apenas as variáveis ​​definidas ~/.config/user-dirs.dirscom xdg-user-dir, por exemplo "$(xdg-user-dir VIDEOS)", mas também as seguintes variáveis ​​padrão:

  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 esse fim, faço o seguinte no meu ~/.bash_loginarquivo:

# 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 um mecanismo para acessar as variáveis ​​de diretório e caminho acima, além das variáveis ​​de diretório do usuário definidas pela especificação da estrutura de diretórios "XDG"?

Tim Friske
fonte
1
Na verdade, é um número:XDG_RUNTIME_DIR:-"/run/user/$UID"
Tom Hale

Respostas:

4

Essas variáveis ​​de ambiente são todas opcionais. Se eles não estiverem configurados, seu script deverá substituir os valores padrão fornecidos na própria especificação .

someprog --cachedir "${XDG_CACHE_HOME:-$HOME/.cache}"
Ignacio Vazquez-Abrams
fonte
2
Essa opcionalidade é uma das principais razões pelas quais eu as defino uma vez como variáveis ​​de ambiente, porque não quero repetir o valor padrão em cada "${XDG_CACHE_HOME:-~/.cache}"acesso. Idealmente, deve existir um mecanismo semelhante ao "$(xdg-user-dir VIDEOS)"fornecimento implícito desse valor padrão. Dessa forma, não preciso me lembrar do valor padrão para cada variável XDG.
amigos estão dizendo sobre tim friske
3
@ Tim Friske: Note que "${XDG_CACHE_HOME:-~/.cache}"está incorreto, deve-se usar em seu "${XDG_CACHE_HOME:-$HOME/.cache}"lugar.
Flimm
0

Além dos padrões:

man xdg-user-dir=> VER TAMBÉM: xdg-user-dirs-update(1)

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

man user-dirs.defaults=> user-dirs.defaultssob o primeiro XDG_CONFIG_DIRS(padrão /etc/xdg:)

Assim:

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