[Ubuntu 19.10 与gdm
]
以下是我的内容$HOME/.profile
:
# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.
# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/.local/bin" ] ; then
PATH="$HOME/.local/bin:$PATH"
fi
XDG_DATA_DIRS=$HOME/PRATAP/:$XDG_DATA_DIRS
我在上面的文件中添加了最后一行,即XDG_DATA_DIRS=$HOME/PRATAP/:$XDG_DATA_DIRS
当我重新启动..
$ env | grep XDG_DATA_DIRS
XDG_DATA_DIRS=/home/admin/PRATAP/:/usr/share/ubuntu:/usr/local/share/:/usr/share/:/var/lib/snapd/desktop
$
注销并登录..
$ env | grep XDG_DATA_DIRS
XDG_DATA_DIRS=/home/admin/PRATAP/:/home/admin/PRATAP/:/usr/share/ubuntu:/usr/local/share/:/usr/share/:/var/lib/snapd/desktop
再次注销并登录..
$ env | grep XDG_DATA_DIRS
XDG_DATA_DIRS=/home/admin/PRATAP/:/home/admin/PRATAP/:/home/admin/PRATAP/:/usr/share/ubuntu:/usr/local/share/:/usr/share/:/var/lib/snapd/desktop
我添加的路径是重复的,即$HOME/PRATAP/
。
有没有办法阻止这种情况重复发生?
答案1
您可能想要清理 XDG_DATA_DIRS 变量。您仅在注销/登录时才在环境变量中遇到欺骗的事实与您所描述的内容、.profile 文件的内容以及下面的一般解决方案一致
首先定义可执行脚本pathclean
(改编自 @Gilles' 2012 年 6 月 17 日在 Stackexchange 上发表的帖子 # 40749,由于某种原因我找不到其 url):
$ cat pathclean
#!/usr/bin/bash
# Cleans up PATH variable
# Script accepts exactly 2 arguments
dedup_path() {
if [ -n "$1" ]; then # TRUE if length of string is !=0
OLPATH=${1}:; NUPATH=""
while [ -n "$OLPATH" ]; do
x=${OLPATH%%:*} # keep 1st entry in string $OLPATH
case $NUPATH: in
*:"$x":*) ;; # already there
*) NUPATH=$NUPATH:$x ;; # not there yet
esac
OLPATH=${OLPATH#*:} # remove 1st entry in $OLPATH
done
NUPATH=${NUPATH#:}
unset OLPATH x
fi
echo "$NUPATH"
}
echo $( sed -e 's/::/:/g' -e 's/:$//' <(dedup_path "${2}") )
exit 0
只需将其放在pathclean
您通常保存脚本的位置即可。这可能是在 或$HOME/.local/share/
中/opt/bin/
。就您而言,$HOME/.local/share/
可能是最好的位置。然后使用 使其可执行$ chmod +x $HOME/.local/share/pathclean
。
最后不要忘记添加$HOME/.profile
以下行:
XDG_DATA_DIRS=$($HOME/.local/share/pathclean XDG_DATA_DIRS "$XDG_DATA_DIRS").
重要的是上面的行要放置在最后你的$HOME/.profile
。
该脚本会从您的 $HOME/.profile 自动运行,该脚本由您的登录管理器在 GUI 登录时获取一次。
这应该可以让您远离受骗者。您还可以毫无问题地将 dupe-cleanup 应用于您的 PATH env-var。