~/.profile で設定されたパス類似環境変数からなりすましを削除します。

~/.profile で設定されたパス類似環境変数からなりすましを削除します。

【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を適用することもできます。

関連情報