วิธีลบเส้นทางจากเส้นทางของระบบ (`$ PATH`) โดยใช้คำสั่งเทอร์มินัล


10

ฉันเพิ่มเส้นทางไดเรกทอรีไปยังเส้นทางของระบบ ( $PATH) โดยเรียก

export PATH=$PATH:/home/avinash/Desktop/raj

ตอนนี้เส้นทางของฉันมีลักษณะเช่นนี้

$ echo $ PATH
/ usr / lib / lightdm / lightdm: / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / เกม: / usr / local / เกม : / home / Avinash / Desktop / raj

ฉันต้องการลบออก/home/avinash/Desktop/rajจากตัวแปรเส้นทางของระบบโดยใช้คำสั่ง ( เช่นคำสั่งส่งออกในการเพิ่มเส้นทาง )


คุณใส่คำสั่งการส่งออกที่ไหน
souravc

สถานี gnome (ctrl + alt + t)
Avinash Raj

คำตอบ:


14

การรันexport PATH=$PATH:/...ไม่ได้ตั้งค่าทั้งPATHระบบของคุณ มันเป็นเพียงตัวแปรเชลล์ เริ่มเชลล์ใหม่และBOOMมันหายไปแล้ว เห็นได้ชัดว่าหากคุณได้เพิ่มลงใน~/.bashrc(หรือไฟล์ bootstrap ของสภาพแวดล้อมอื่น) คุณจะต้องยกเลิกการเปลี่ยนแปลงนั้น แต่ไม่ได้ฟังเหมือนปัญหาของคุณที่นี่

หากคุณหมดหวังที่จะไม่เริ่มเชลล์ใหม่คุณสามารถตั้งค่าโดยการลบมันด้วยตนเองด้วย:

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

11

ในเชลล์ปัจจุบันของคุณ (เซสชันปัจจุบันของ gnome-terminal) คุณสามารถทำได้โดยใช้:

export PATH=${PATH%:/home/avinash/Desktop/raj}

โดยทั่วไป:

${string%substring}

ลบที่สั้นที่สุดตรงกับของ$substringจากด้านหลัง$stringของ

ตรวจสอบการจัดการสตริงสำหรับข้อมูลเพิ่มเติม


2

หากคุณต้องการใช้มันเป็นคำสั่งนี่เป็นสคริปต์เล็กน้อย:

#!/bin/bash

# This script removes folder from PATH variable
# Folders to remove reading as arguments

if [ $# -lt 1 ]; then
    echo "You should give at least one argument"
    echo "For example"
    echo "$0 /usr/local/bin"
else
    FOLDERS_TO_REMOVE=`echo $@ | sed 's/ /|/g'`

    echo "You actually PATH variable is:"
    echo $PATH
    echo "###"

    PATH=$( echo ${PATH} | tr -s ":" "\n" | grep -vwE "(${FOLDERS_TO_REMOVE})" | tr -s "\n" ":" | sed "s/:$//" )

    echo "Now you need to run"
    echo "export PATH=$PATH"
fi

ตั้งชื่อunexportและเพิ่มลงใน PATH ของคุณ

การใช้งาน:

unexport /usr/local/bin /bin /sbin

PATHสคริปต์นี้ไม่เปลี่ยนแปลงของคุณจริง หากคุณต้องการให้สคริปต์ทำคุณควรเปลี่ยนบรรทัดสุดท้าย echo "export PATH=$PATH"เพื่อทดแทนexport PATH=$PATH


2

หากคุณใส่exportคำสั่งในไฟล์การเริ่มต้นของเชลล์เช่น~/.bashrcคุณสามารถใช้คำสั่งต่อไปนี้ในเทอร์มินัล

#remove the export statement from the file.
sed -i 's#export PATH=$PATH:/home/avinash/Desktop/raj##g' ~/.bashrc
#source ~/.bashrc
. ~/.bashrc

มันจะลบโฟลเดอร์ออกจากเส้นทาง

หากคุณส่งออกพา ธ จากเทอร์มินัล

โฟลเดอร์จะอยู่ในเส้นทางตราบใดที่คุณอยู่ในเปลือกนั้น ในการเขียนทับเส้นทางคุณต้องกำหนดเส้นทางใหม่ ดังที่ oli ได้กล่าวไปแล้วในคำตอบอื่น ๆ

คุณสามารถใช้คำสั่งต่อไปนี้เพื่อตั้งค่าเส้นทางเก่า

export PATH=`echo ${PATH/\:\/home\/avinash\/Desktop\/raj/}`

หรือเพียงแค่

export PATH=${PATH/':/home/avinash/Desktop/raj'/}

นี่คือการเปลี่ยนซับสตริง

${string/substring/replacement}

2

แฮ็คหนึ่งอันที่สกปรกคือ

export PATH="$( echo $PATH| tr : '\n' |grep -v raj | paste -s -d: )"
  1. แยกแต่ละ dir ใน PATH โดยใช้บรรทัด tr
  2. ลบสิ่งที่คุณไม่ต้องการ (การจับคู่พา ธ "raj") โดยใช้grep -vและ
  3. ยุบกลับเป็นสตริง ":" ที่ใช้ตัวคั่นpasteยาว

นี่อาจจะไม่ทำงานได้ดีถ้ามี dir ใน PATH :หรือมีบรรทัดใหม่

ถ้าคุณพบว่าตัวเองทำเช่นนี้มากพิจารณาทำให้ฟังก์ชั่นและการบันทึกรายละเอียดในเปลือกของคุณ (เช่น.bashrc, .zshrc)

# use like: rminpath "raj"
rminpath(){ export PATH="$( echo $PATH| tr : '\n' |grep -v "$1" | paste -sd: )"; }

1

export PATH=$PATH:/home/avinash/Desktop/raj (ที่นี่คุณได้เพิ่มไฟล์ลงในตัวแปรพา ธ )

echo $PATH
หากคุณรันคำสั่งนี้นี่คือผลลัพธ์:

/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/avinash/Desktop/raj

คุณจะลบออกจากเส้นทางได้อย่างไร เพียงแค่รัน

$ export PATH=${PATH/'/home/avinash/Desktop/raj'/}

มันเป็นแนวคิดของการเปลี่ยนสตริง

$ export PATH=${string/substring/replacement}

0

คำสั่ง shell builtin exportไม่ได้ระบุว่ามีการตั้งค่าตัวแปรหรือไม่โดยพิจารณาว่าตัวแปรและค่าของมันถูกตั้งค่าในกระบวนการย่อยด้วยหรือไม่

sourceการเปลี่ยนตัวแปรที่ส่งออกหรือไม่ไม่ได้ส่งผลกระทบต่อการปกครองหรือสูงกว่าเพื่อให้การเปลี่ยนแปลงในสคริปต์ไม่มีผลจนกว่าสคริปต์ที่ทำงานด้วย

ฟังก์ชั่นเปลือก:

function trimpath {
    PATH=${PATH%:*}
}

จะตัดส่วนสุดท้ายของตัวแปร PATH exportสถานะของมันไม่ได้รับผลกระทบ


0

ประกาศ -x PATH = "/ ต้องการ / path / you_want" ถ้าฉันไม่เข้าใจผิดว่าตัวเองจะอัปเดตสิ่งที่คุณต้องการและมันก็เป็นไปตามคำสั่งของคุณอย่างสมบูรณ์ [ตรวจสอบให้แน่ใจว่าคุณเรียกใช้ในฐานะรูทและในฐานะผู้ใช้ที่คุณต้องการให้การเปลี่ยนแปลงนี้ส่งผลกระทบ] เพื่อให้แน่ใจว่าคุณใช้คำสั่ง ENV ในภายหลังเพื่อให้แน่ใจว่า $ PATH ถูกเปลี่ยนแปลงอย่างมีประสิทธิภาพตามที่คุณต้องการ (นี่คือการใช้งานสำหรับการเปลี่ยนแปลงใด ๆ ของผลลัพธ์ที่คุณจะได้รับเมื่อคุณเรียกใช้ '/ usr / bin / env' แม้ว่าฉันไม่รู้ว่ามันถาวรหรือไม่ในแง่ที่ทำตามที่ระบุไว้ข้างต้นและแก้ไข ~ / .bashrc สำหรับ มันจะติด)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.