Làm cách nào để xóa một đường dẫn khỏi đường dẫn hệ thống (`$ PATH`) bằng các lệnh đầu cuối?


10

Tôi đã thêm một đường dẫn thư mục vào đường dẫn hệ thống ( $PATH) bằng cách chạy,

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

Bây giờ con đường của tôi trông như thế này,

$ echo $ PATH
/ usr / lib / lightdm / lightdm: / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / games: / usr / local / games : / nhà / avinash / Máy tính để bàn / raj

Tôi muốn loại bỏ /home/avinash/Desktop/rajkhỏi biến đường dẫn hệ thống bằng cách sử dụng lệnh ( giống như lệnh export thực hiện khi thêm đường dẫn ).


bạn đã đặt báo cáo xuất khẩu ở đâu?
souravc

thiết bị đầu cuối gnome (ctrl + alt + t)
Avinash Raj

Câu trả lời:


14

Chạy export PATH=$PATH:/...không đặt toàn PATHhệ thống của bạn . Nó chỉ là một biến vỏ. Bắt đầu một vỏ mới và BÙM , nó đã biến mất. Rõ ràng nếu bạn đã thêm nó vào ~/.bashrc(hoặc tệp bootstrap môi trường khác), bạn sẽ phải hoàn nguyên thay đổi đó nhưng nó không giống như vấn đề của bạn ở đây.

Nếu bạn không muốn khởi động trình bao mới, bạn có thể thiết lập nó bằng cách xóa nó bằng tay, với:

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

11

Trong trình bao hiện tại của bạn (phiên hiện tại của gnome-terminal), bạn có thể thực hiện việc này bằng cách sử dụng:

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

Nói chung:

${string%substring}

xóa trận đấu ngắn nhất $substringtừ phía sau của $string.

Kiểm tra thao tác chuỗi để biết thêm.


2

Nếu bạn muốn sử dụng nó như một lệnh, đây là một đoạn script nhỏ:

#!/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

Đặt tên cho nó unexport, và thêm nó vào PATH của bạn.

Sử dụng:

unexport /usr/local/bin /bin /sbin

Kịch bản này không thay đổi thực sự của bạn PATH. Nếu bạn muốn tập lệnh thực hiện nó, bạn nên thay đổi dòng cuối cùng. Thay thế echo "export PATH=$PATH"choexport PATH=$PATH


2

Nếu bạn đặt exportcâu lệnh trong bất kỳ tệp khởi tạo shell nào ~/.bashrc, bạn có thể sử dụng các lệnh sau trong terminal,

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

Nó sẽ xóa thư mục khỏi đường dẫn.

Nếu bạn đã xuất đường dẫn từ một thiết bị đầu cuối

Thư mục sẽ ở trong đường dẫn miễn là bạn ở trong vỏ đó. Để ghi đè đường dẫn, bạn phải gán đường dẫn mới. Như oli đã đề cập trong câu trả lời khác.

Bạn có thể sử dụng lệnh sau để đặt đường dẫn cũ

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

Hoặc đơn giản

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

Đây là Thay thế chuỗi con,

${string/substring/replacement}

2

Một hack bẩn là

export PATH="$( echo $PATH| tr : '\n' |grep -v raj | paste -s -d: )"
  1. phân tách từng thư mục trong PATH của bạn bằng cách sử dụng dòng tr
  2. xóa những gì bạn không muốn (khớp đường dẫn "raj") bằng cách sử dụng grep -v
  3. thu gọn lại thành một chuỗi phân cách ":" dài bằng cách sử dụng paste.

điều này có thể sẽ không hoạt động tốt nếu bất kỳ thư mục nào trong PATH có :hoặc một dòng mới

nếu bạn thấy mình làm điều này rất nhiều, xem xét làm cho nó một chức năng và tiết kiệm trong hồ sơ shell của bạn (ví dụ .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 (Ở đây bạn đã thêm tệp vào biến đường dẫn.)

echo $PATH
Nếu bạn thực hiện lệnh này, Đây là đầu ra:

/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

Làm thế nào để bạn loại bỏ nó khỏi đường dẫn? chỉ cần thực hiện

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

Đây là một khái niệm về thay thế chuỗi.

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

0

Lệnh shellin exportKhông xác định liệu một biến có được đặt hay không, nó sẽ xác định nếu biến và giá trị của nó cũng được đặt trong các quy trình phụ.

Thay đổi một biến, xuất hoặc không, không ảnh hưởng đến quá trình cha hoặc ở trên, do đó, thay đổi nó trong một tập lệnh không có tác dụng trừ khi tập lệnh đó được chạy với source.

Một hàm shell:

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

sẽ cắt bỏ thành phần cuối cùng của biến PATH. exportTình trạng của nó không bị ảnh hưởng.


0

khai báo -x PATH = "/ mong muốn / đường dẫn / you_want" nếu tôi không nhầm rằng chính nó sẽ cập nhật những gì bạn muốn và nó hoàn toàn theo ý bạn. [Đảm bảo bạn chạy với quyền root VÀ là người dùng mong muốn mà bạn muốn thay đổi này ảnh hưởng] Để chắc chắn gấp đôi, hãy chạy ENV sau đó để đảm bảo rằng $ PATH đã được thay đổi hiệu quả như bạn muốn. (Điều này có thể sử dụng để thay đổi bất kỳ đầu ra nào bạn sẽ nhận được khi chạy '/ usr / bin / env'. Mặc dù tôi không biết liệu nó có vĩnh viễn hay không. Về mặt đó, như đã nêu ở trên và thay đổi ~ / .bashrc cho nó dính vào)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.