web-gelistirme-sc.com

Yedekli yolları $ PATH değişkeninden kaldırın

Aynı yolu $ PATH değişkeninde 6 kez tanımladım.

İşe yarayıp yaramadığını kontrol etmek için oturumu kapatmıyordum.

Kopyaları nasıl kaldırabilirim?

$ PATH değişkeni şöyle görünür:

echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin

Bunu sadece nasıl sıfırlarım?

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
119
charles hendry

Siz sadece uygulayın:

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

kalıcı olarak değiştirmek istiyorsanız, herhangi bir .bashrc, bash.bashrc,/etc/profile - sisteminize ve kullanıcı gereksinimlerinize uygun olanı ekleyin.

111
hovanessyan

Bash kullanıyorsanız, /home/wrong/dir/ dizinini PATH değişkeninizden kaldırmak istiyorsanız, diyelim ki şunları da yapabilirsiniz:

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

Komut dosyanızı çalıştırmadan önce PATH değişkeninden bir yolu kaldırmanız gerekirse, komut dosyasının başına şunu ekleyin:

PATH=$(echo $PATH | sed -e 's;:\?/home/user/bin;;' -e 's;/home/user/bin:\?;;')

Gerekirse, listenin önüne şunu ekleyerek tekrar ekleyebilirsiniz:

PATH=/home/user/bin:$PATH

Veya listenin sonuna tekrar ekleyerek:

PATH=$PATH:/home/user/bin
14
Alex Jolig

Linux: Yedekli yolları $ PATH değişkeninden kaldırın

Sıfırdan gelen Linux, /etc/profile işlevine sahiptir

# 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"
}

Bu, yola eklemek için bu işlevlerle birlikte kullanılmak üzere tasarlanmıştır, böylece gereksiz bir şekilde yapmazsınız:

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"
}

Basit kullanım sadece pathremove 'a kaldırılacak dizin yolunu vermektir - fakat tam olarak eşleşmesi gerektiğini unutmayın.

$ pathremove /home/username/anaconda3/bin

Bu, bu dizinin her örneğini yolunuzdan kaldıracak.

Dizini yolunuzda istiyorsanız, ancak fazlalıklar olmadan, diğer işlevlerden birini kullanabilirsiniz; - özel durumunuz için:

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

Ancak, okunabilirlik endişe değilse, bu noktada sadece yapsanız daha iyi olursunuz:

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

Yukarıdakiler insan tarafından bilinen bütün mermilerde işe yarar mı?

Yukarıdakilerin en azından sh, dash ve bash içinde çalışacağını tahmin ediyorum. Bunun işe yaramadığını öğrenince şaşırdım: csh, fish', orksh`. Bunun Windows komutunda Shell veya Powershell'de çalışacağından şüpheliyim.

Python'unuz varsa, aşağıdaki komut doğrudan sorulanı yapmalıdır (yani gereksiz yolları kaldırın):

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

Tek astar (çok satırlı sorunları gidermek için):

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

Yukarıdakiler daha sonraki gereksiz yolları siler. Önceki gereksiz yolları kaldırmak için, ters çevrilmiş bir listenin dizinini kullanın ve tekrar ters çevirin:

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

İşte PATH'i temizleyen bir satırlık kod.

  • PATH'in sırasını bozmaz, sadece kopyaları siler
  • Davranır: ve PATH incelikle
  • Özel karakter kullanılamaz, bu yüzden kaçış gerektirmez
  • /bin/awk kullanır, böylece PATH bozulduğunda bile çalışır

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

Yalnızca yinelenen yolları kaldırmak istiyorsanız, bir süre önce yazdığım bu betiği kullanıyorum, çünkü birden çok Perl5/bin yolu ile sorun yaşıyordum:

#!/bin/bash
#
# path-cleanup
#
# This must be run as "source path-cleanup" or ". path-cleanup"
# so the current Shell gets the changes.

pathlist=`echo $PATH | sed 's/:/\n/g' | uniq`

# echo "Starting PATH: $PATH"
# echo "pathlist: $pathlist"
unset PATH
# echo "After unset, PATH: $PATH"
for dir in $pathlist
do
    if test -d $dir ; then
        if test -z $PATH; then
            PATH=$dir
        else
            PATH=$PATH:$dir
        fi
    fi
done
export PATH
# echo "After loop, PATH: $PATH"

Ve sonunda ~/.profile dizinine koydum. Neredeyse sadece BASH kullandığımdan, diğer mermilerde denemedim.

2
Kevin Nathan

Kısaca $ {var/find/replace}

PATH=${PATH/%:\/home\/wrong\/dir\//}

Veya bu durumda (değiştirme biti boş olduğu için) sadece:

PATH=${PATH%:\/home\/wrong\/dir\/}

Buraya ilk ben geldim, ancak bunun için bir parametre genişlemesi olacağını düşündüğüm gibi başka şeyler oldum. Sed'den daha kolay!.

Değişken içindeki yer tutucu karakterini veya Word'ü Bash'deki başka bir değişkenden gelen değerle nasıl değiştiririm?

2
sabgenton

Kolayca yapıştırma şablonu için bu Perl kodunu kullanıyorum:

PATH=`echo $PATH | Perl -pe s:/path/to/be/excluded::`

Bu şekilde, ikame operatör için eğik çizgiden kaçmanız gerekmez.

1
  1. Sadece echo $PATH
  2. ayrıntıları bir metin düzenleyiciye kopyala
  3. istenmeyen girişleri kaldır
  4. PATH= # pass new list of entries
1
ckwagaba

$PATH ("yalnızca mevcut olmadığında klasör ekle" veya "bu klasörü kaldır") değerini "düzenlemek" için standart bir araç yoktur.

Bir dahaki sefere giriş yaptığınızda yolun ne olacağını kontrol etmek için telnet localhost (veya telnet 127.0.0.1) kullanın. Daha sonra kullanıcı adınızı ve şifrenizi soracak.

Bu size yeni bir giriş Shell'i (yani mevcut ortamdan hiçbir şey almayan tamamen yeni bir giriş) verir.

Orada $PATH öğesinin değerini kontrol edebilir ve doğru şekilde dolana kadar rc dosyalarınızı düzenleyebilirsiniz. Bu, önemli bir dosyada değişiklik yaptıktan sonra tekrar giriş yapıp yapamayacağınızı görmek için de yararlıdır.

0
Aaron Digulla

Bu yinelenen yolları PATH değişkeninize nasıl eklediniz? . dosyalarınızdan birini düzenlemiş olmalısınız. (Kendi sisteminize/Shell'e bağlı olarak .tcshrc veya .bashrc, vb.] Bunu düzeltmenin yolu dosyayı yeniden düzenlemek ve yinelenen yolları kaldırmaktır.

yapmadıysanız herhangi bir dosyayı düzenlerseniz ve PATH'yi etkileşimli olarak değiştirmeniz gerekir. Bu durumda değişiklikler "yapışmaz", yani başka bir Shell açarsanız ya da oturumu kapatıp tekrar açarsanız, değişiklikler otomatik olarak silinir.

Bazı sistem çapında yapılandırma dosyaları da olduğunu unutmayın, ancak bunları değiştirmediniz, bu nedenle büyük olasılıkla kişisel giriş dizininizdeki dosyaları değiştireceksiniz (bu değişiklikleri bir dizi yola koyulduktan sonra kalıcı yapmak istiyorsanız)

0
Levon

Kabuğunuzun Bash olduğunu varsayarsak yolu şu şekilde ayarlayabilirsiniz:

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

fakat Levon'un başka bir cevabında söylediği gibi, Shell'i sonlandırır bağlamaz değişiklikler kaybolacak. Muhtemelen ~/.bash_profile veya ~/.bashrc içinde PATH ayarlarınızı yapmak istersiniz.

0
Leo