【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
(Stackexchangeの@Gillesの2012年6月17日の投稿#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
。
このスクリプトは、GUIログイン時にログインマネージャが一度インポートする$ HOME / .profileで自動的に実行されます。
これは詐欺に遭わないようにします。問題なくPATH env-varにdupe-cleanupを適用することもできます。