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