Linux 去除重复、无效的 PATH
#!/usr/bin/env bash
###
#
# 去除 PATH 中,不存在的目录
# 去除只包含有 . 的目录
# 去除重复的 PATH
#
###
# 获取当前的 PATH 环境变量
__OLD_PATH=$PATH
# 将 PATH 环境变量转换为数组
if [[ "${SHELL##*/}" = "zsh" ]]; then
IFS=':' read -rA PATH_ARRAY <<<"$__OLD_PATH"
else
IFS=':' read -ra PATH_ARRAY <<<"$__OLD_PATH"
fi
# 创建一个新数组,存储不重复的目录
__NEW_PATH_ARRAY=()
# 遍历 PATH_ARRAY 数组,检查目录是否存在
for i in "${PATH_ARRAY[@]}"; do
_i=$(echo "$i" | sed -r 's#(^|:)\.+($|:)#\1\2#g')
if [ -n "$_i" ] && [ -d "$_i" ]; then
__NEW_PATH_ARRAY+=("$_i")
fi
done
# 连接 PATH
__NEW_PATH=$(
IFS=:
echo "${__NEW_PATH_ARRAY[*]}"
)
# 去重
__REAL_PATH=$(echo "$__NEW_PATH" | sed 's/:/\n/g' | sort | uniq | tr -s '\n' ':' | sed 's/:$//g')
# # 将新的 PATH 变量应用到当前 Shell
export PATH="$__REAL_PATH"