Skip to content

Commit e59dfd4

Browse files
committed
fix: failed to export XDG_DATA_DIRS enviroment
Path "/usr/local/share:/usr/share" must be set when XDG_DATA_DIRS is empty.
1 parent 9f7b240 commit e59dfd4

1 file changed

Lines changed: 9 additions & 20 deletions

File tree

misc/lib/linglong/generate-xdg-data-dirs.sh

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,7 @@
1414
LINGLONG_ROOT="@LINGLONG_ROOT@"
1515
LINGLONG_EXPORT_PATH="@LINGLONG_EXPORT_PATH@"
1616

17-
# 规范化 LINGLONG_DATA_DIR:移除末尾可能存在的斜杠
1817
LINGLONG_DATA_DIR="${LINGLONG_ROOT}/entries/share"
19-
LINGLONG_DATA_DIR=${LINGLONG_DATA_DIR%/}
2018

2119
# --- 辅助函数:安全地添加路径到 XDG_DATA_DIRS ---
2220
# 这个函数会检查路径是否已存在,如果不存在则添加。
@@ -26,21 +24,14 @@ _add_path_to_xdg_data_dirs() {
2624
local path_to_add="${1%/}" # 确保要添加的路径没有末尾斜杠
2725
local position="${2:-start}" # 默认添加到开头
2826

29-
# 确保 XDG_DATA_DIRS 变量已定义,如果未定义则初始化为空字符串
30-
: "${XDG_DATA_DIRS:=}"
31-
3227
# 检查路径是否已存在于 XDG_DATA_DIRS 中
3328
# 在 XDG_DATA_DIRS 两端加上冒号,以确保精确匹配(无论路径在开头、中间还是结尾)
3429
if [[ ":${XDG_DATA_DIRS}:" == *":${path_to_add}:"* ]]; then
3530
# 路径已存在,不执行任何操作
3631
return 0
3732
fi
3833

39-
# 如果路径不存在,则根据指定位置添加
40-
if [[ -z "$XDG_DATA_DIRS" ]]; then
41-
# 如果 XDG_DATA_DIRS 当前为空,直接赋值
42-
XDG_DATA_DIRS="$path_to_add"
43-
elif [[ "$position" == "start" ]]; then
34+
if [[ "$position" == "start" ]]; then
4435
# 添加到开头
4536
XDG_DATA_DIRS="$path_to_add:$XDG_DATA_DIRS"
4637
elif [[ "$position" == "end" ]]; then
@@ -49,21 +40,19 @@ _add_path_to_xdg_data_dirs() {
4940
fi
5041
}
5142

43+
# 如果 XDG_DATA_DIRS 为空,则先设置为 /usr/local/share:/usr/share
44+
# 参考: https://specifications.freedesktop.org/basedir-spec/latest
45+
_add_path_to_xdg_data_dirs "/usr/local/share" "end"
46+
_add_path_to_xdg_data_dirs "/usr/share" "end"
47+
48+
# 将 LINGLONG_DATA_DIR 添加到 XDG_DATA_DIRS 的末尾(如果不存在)
49+
_add_path_to_xdg_data_dirs "$LINGLONG_DATA_DIR" "end"
50+
5251
# 如果有自定义 LINGLONG_EXPORT_PATH(默认为 "share"),将自定义路径添加到 XDG_DATA_DIRS
5352
if [ "$LINGLONG_EXPORT_PATH" != "share" ]; then
54-
# 规范化 CUSTOM_DATA_DIR:移除末尾可能存在的斜杠
5553
CUSTOM_DATA_DIR="${LINGLONG_ROOT}/entries/${LINGLONG_EXPORT_PATH}"
56-
CUSTOM_DATA_DIR=${CUSTOM_DATA_DIR%/}
5754
_add_path_to_xdg_data_dirs "$CUSTOM_DATA_DIR" "start"
5855
fi
5956

60-
# 2. 处理 LINGLONG_DATA_DIR 的添加逻辑
61-
# 如果 XDG_DATA_DIRS 为空,则先设置为 /usr/local/share:/usr/share,
62-
# 然后再将 LINGLONG_DATA_DIR 添加到末尾。
63-
: "${XDG_DATA_DIRS:=/usr/local/share:/usr/share}"
64-
65-
# 然后,将 LINGLONG_DATA_DIR 添加到 XDG_DATA_DIRS 的末尾(如果不存在)
66-
_add_path_to_xdg_data_dirs "$LINGLONG_DATA_DIR" "end"
67-
6857
# --- 清理辅助函数 ---
6958
unset -f _add_path_to_xdg_data_dirs

0 commit comments

Comments
 (0)