BashでXDGディレクトリとパスを利用する方法は?


9

私はどのようにアクセスするには定義された変数だけでなく、不思議~/.config/user-dirs.dirsxdg-user-dir、例えば"$(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
それは実際には数だ:XDG_RUNTIME_DIR:-"/run/user/$UID"
トム・ヘイル

回答:


4

これらの環境変数はすべてオプションです。それらが設定されていない場合、スクリプトは仕様自体で指定されいるデフォルト値を置き換える必要があります。

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

2
このオプション性は、すべての"${XDG_CACHE_HOME:-~/.cache}"アクセスでデフォルト値を繰り返したくないので、環境変数として一度定義する主な理由の1つです。最適には、"$(xdg-user-dir VIDEOS)"暗黙的にデフォルト値を提供する場合と同様のメカニズムが存在する必要があります。そうすれば、すべてのXDG変数のデフォルト値を覚えておく必要がありません。
Tim Friske

3
@Tim Friske:"${XDG_CACHE_HOME:-~/.cache}"間違い"${XDG_CACHE_HOME:-$HOME/.cache}"です。代わりに使用してください。
Flimm 2013

0

さらにデフォルト:

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.