GNU/Linux >> Belajar Linux >  >> Linux

Hapus jalur yang berlebihan dari variabel $PATH

Ini adalah kode satu baris yang membersihkan PATH

  • Itu tidak mengganggu urutan PATH, hanya menghapus duplikat
  • Memperlakukan :dan mengosongkan PATH dengan anggun
  • Tidak ada karakter khusus yang digunakan, jadi tidak perlu melarikan diri
  • Menggunakan /bin/awk jadi ini berfungsi bahkan saat PATH rusak

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

Anda cukup mengeksekusi:

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

itu untuk sesi saat ini, jika Anda ingin mengubahnya secara permanen, tambahkan ke .bashrc, bash.bashrc, /etc/profile - apa pun yang sesuai dengan kebutuhan sistem dan pengguna Anda.

Catatan:Ini untuk Linux. Kami akan memperjelas hal ini untuk pembuat kode baru. (` , ') Jangan mencoba SET =ini.


Linux:Hapus jalur redundan dari variabel $PATH

Linux From Scratch memiliki fungsi ini di /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"
}

Ini dimaksudkan untuk digunakan dengan fungsi-fungsi ini untuk ditambahkan ke jalur, sehingga Anda tidak melakukannya secara berlebihan:

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

Penggunaan sederhana adalah dengan memberikan pathremove jalur direktori yang akan dihapus - namun perlu diingat bahwa jalur tersebut harus sama persis:

$ pathremove /home/username/anaconda3/bin

Ini akan menghapus setiap instance direktori tersebut dari jalur Anda.

Jika Anda menginginkan direktori di jalur Anda, tetapi tanpa redudansi, Anda bisa menggunakan salah satu fungsi lainnya, mis. - untuk kasus khusus Anda:

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

Namun, kecuali keterbacaan menjadi perhatian, pada titik ini Anda lebih baik melakukan:

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

Apakah hal di atas akan berfungsi di semua cangkang yang diketahui manusia?

Saya akan menganggap hal di atas berfungsi di sh , dash , dan bash paling sedikit. Saya akan terkejut mengetahui itu tidak berfungsi di csh , fish', or ksh`. Saya ragu ini akan berhasil di shell perintah Windows atau Powershell.

Jika Anda memiliki Python, jenis perintah berikut harus melakukan apa yang diminta secara langsung (yaitu, menghapus jalur yang berlebihan):

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

Satu baris (untuk menghindari masalah multibaris):

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

Di atas menghapus jalur yang berlebihan nanti. Untuk menghapus jalur redundan sebelumnya, gunakan indeks daftar terbalik dan balikkan lagi:

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

Jika Anda menggunakan Bash, Anda juga dapat melakukan hal berikut jika, katakanlah, Anda ingin menghapus direktori /home/wrong/dir/ dari PATH Anda variabel:

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

Linux
  1. Cara Menambah atau Menghapus Pengguna dari Grup di Linux

  2. Menambahkan entri baru ke variabel PATH di ZSH

  3. Implikasi keamanan menggunakan jalur relatif dalam variabel lingkungan PATH?

  1. Cara mengatur variabel $PATH Anda di Linux

  2. Kiat dan trik variabel lingkungan Linux

  3. $path Variabel Env Variabel?

  1. 2 cara untuk mengatur variabel $PATH secara permanen di ubuntu

  2. Cara Mengatur Variabel $Path di Linux

  3. Cara menghapus aria2 dari Ubuntu