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 rusakexport 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\/$//'`