GNU/Linux >> Linux の 問題 >  >> Linux

$PATH 変数から冗長なパスを削除します

これは、PATH をクリーンアップする 1 行のコードです

  • PATH の順序を乱さず、重複を削除するだけです
  • Treats :and empth PATH を優雅に
  • 特殊文字は使用されていないため、エスケープは必要ありません
  • /bin/awk を使用 そのため、PATH が壊れていても機能します

    export PATH="$(echo "$PATH" |/bin/awk 'BEGIN{RS=":";}
    {sub(sprintf("%c$",10),"");if(A[$0]){}else{A[$0]=1;
    printf(((NR==1)?"":":")$0)}}')";
    

実行するだけです:

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

これは現在のセッション用です。永続的に変更したい場合は、.bashrc、bash.bashrc、/etc/profile (システムとユーザーのニーズに合ったもの) に追加してください。

注:これは Linux 用です。これは、新しいコーダーのために明確にします。 (` , ') これらを SET =しようとしないでください。


<ブロック引用>

Linux:$PATH 変数から冗長なパスを削除

Linux From Scratch には、この機能が /etc/profile にあります

# Functions to help us manage paths.  Second argument is the name of the
# path variable to be modified (default: PATH)
pathremove () {
        local IFS=':'
        local NEWPATH
        local DIR
        local PATHVARIABLE=${2:-PATH}
        for DIR in ${!PATHVARIABLE} ; do
                if [ "$DIR" != "$1" ] ; then
                  NEWPATH=${NEWPATH:+$NEWPATH:}$DIR
                fi
        done
        export $PATHVARIABLE="$NEWPATH"
}

これは、パスに追加するためにこれらの関数で使用することを意図しているため、重複して実行することはありません:

pathprepend () {
        pathremove $1 $2
        local PATHVARIABLE=${2:-PATH}
        export $PATHVARIABLE="$1${!PATHVARIABLE:+:${!PATHVARIABLE}}"
}

pathappend () {
        pathremove $1 $2
        local PATHVARIABLE=${2:-PATH}
        export $PATHVARIABLE="${!PATHVARIABLE:+${!PATHVARIABLE}:}$1"
}

簡単な使い方は pathremove を与えるだけです 削除するディレクトリ パス - ただし、正確に一致する必要があることに注意してください:

$ pathremove /home/username/anaconda3/bin

これにより、そのディレクトリの各インスタンスがパスから削除されます。

パスにディレクトリが必要であるが、冗長性がない場合は、他の関数のいずれかを使用できます。 - 特定の場合:

$ pathprepend /usr/local/sbin
$ pathappend /usr/local/bin
$ pathappend /usr/sbin
$ pathappend /usr/bin
$ pathappend /sbin
$ pathappend /bin
$ pathappend /usr/games

ただし、読みやすさが問題でない限り、この時点では、次のことを行った方がよいでしょう:

$ export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

上記は、人類が知っているすべてのシェルで機能しますか?

上記は sh で動作すると思います 、 dash 、および bash 少なくとも。 csh で動作しないことを知って驚くでしょう 、 fish', or ksh`. Windows コマンド シェルや Powershell で動作するとは思えません。

Python を使用している場合は、次の種類のコマンドで、直接求められていることを実行する必要があります (つまり、冗長なパスを削除します):

$ PATH=$( python -c "
import os
path = os.environ['PATH'].split(':')
print(':'.join(sorted(set(path), key=path.index)))
" )

ワンライナー (複数行の問題を回避するため):

$ PATH=$( python -c "import os; path = os.environ['PATH'].split(':'); print(':'.join(sorted(set(path), key=path.index)))" )

上記により、後の冗長パスが削除されます。以前の冗長なパスを削除するには、逆順のリストのインデックスを使用して、もう一度逆順にします:

$ PATH=$( python -c "
import os
path = os.environ['PATH'].split(':')[::-1]
print(':'.join(sorted(set(path), key=path.index, reverse=True)))
" )

Bash を使用している場合、たとえばディレクトリ /home/wrong/dir/ を削除する場合は、次のこともできます。 PATH から 変数:

PATH=`echo $PATH | sed -e 's/:\/home\/wrong\/dir\/$//'`

Linux
  1. Linuxで$PATH変数を設定する方法

  2. $ pathにきれいに追加する方法は?

  3. $ path変数環境変数?

  1. Linuxでグループにユーザーを追加またはグループから削除する方法

  2. ubuntuで$PATH変数を永続的に設定する2つの方法

  3. Ubuntu から VS Code と設定を削除するにはどうすればよいですか?

  1. Linux環境変数のヒントとコツ

  2. Linuxで$Path変数を設定する方法

  3. Ubuntu から aria2 をアンインストールする方法