Bagaimana cara menghapus jalur dari jalur sistem (`$ PATH`) menggunakan perintah terminal?

10

Saya menambahkan jalur direktori ke jalur sistem ( $PATH) dengan menjalankan,

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

Sekarang jalan saya terlihat seperti ini,

$ echo $ PATH
/ usr / lib / lightdm / lightdm: / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / game: / usr / local / games : / home / avinash / Desktop / raj

Saya ingin menghapus /home/avinash/Desktop/rajdari variabel jalur sistem dengan menggunakan perintah ( seperti perintah ekspor tidak menambahkan jalur ).

Avinash Raj
sumber
di mana Anda meletakkan pernyataan ekspor?
souravc
terminal gnome (ctrl + alt + t)
Avinash Raj

Jawaban:

14

Menjalankan export PATH=$PATH:/...tidak mengatur seluruh PATHsistem Anda . Itu hanya variabel shell. Mulai shell baru dan BOOM , itu hilang. Tentunya jika Anda telah menambahkannya ke ~/.bashrc(atau file bootstrap lingkungan lain), Anda harus mengembalikan perubahan itu tetapi tidak terdengar seperti masalah Anda di sini.

Jika Anda tidak ingin memulai shell baru, Anda dapat mengaturnya dengan menghapusnya secara manual, dengan:

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

Di shell Anda saat ini (sesi gnome-terminal Anda saat ini), Anda dapat melakukan ini menggunakan:

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

Secara umum:

${string%substring}

menghapus terpendek cocok dari $substringdari belakang dari $string.

Lihat manipulasi String untuk info lebih lanjut.

Radu Rădeanu
sumber
2

Jika Anda ingin menggunakannya sebagai perintah, berikut ini adalah skrip kecil:

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

Beri nama unexport, dan tambahkan ke PATH Anda.

Pemakaian:

unexport /usr/local/bin /bin /sbin

Script ini sebenarnya tidak mengubah Anda PATH. Jika Anda ingin skrip melakukannya, Anda harus mengubah baris terakhir. Pengganti echo "export PATH=$PATH"keexport PATH=$PATH

c0rp
sumber
2

Jika Anda meletakkan exportpernyataan dalam file inisiasi shell seperti ~/.bashrc, Anda dapat menggunakan perintah berikut di terminal,

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

Ini akan menghapus folder dari jalur.

Jika Anda telah mengekspor jalur dari terminal

Folder akan berada di jalur selama Anda berada di shell itu. Untuk menimpa jalur Anda harus menetapkan jalur baru. Seperti yang sudah disebutkan dalam jawaban lain.

Anda dapat menggunakan perintah berikut untuk mengatur jalur lama

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

Atau sederhananya

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

Ini adalah Substring Replacement,

${string/substring/replacement}
souravc
sumber
2

Satu hack kotor adalah

export PATH="$( echo $PATH| tr : '\n' |grep -v raj | paste -s -d: )"
  1. pisahkan setiap dir di PATH Anda dengan menggunakan garis tr
  2. hapus apa yang tidak Anda inginkan (pencocokan jalur "raj") menggunakan grep -v, dan
  3. runtuh kembali ke string ":" yang dibatasi menggunakan paste.

ini mungkin tidak akan berfungsi dengan baik jika ada dir di PATH memiliki :atau baris baru

jika Anda sering melakukan hal ini, pertimbangkan untuk membuatnya berfungsi dan simpan di profil shell Anda (mis. .bashrc, .zshrc)

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

export PATH=$PATH:/home/avinash/Desktop/raj (Di sini Anda telah menambahkan file ke variabel path.)

echo $PATH
Jika Anda menjalankan perintah ini, Ini adalah output:

/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

Bagaimana Anda menghapusnya dari jalur? jalankan saja

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

Ini adalah konsep penggantian string.

$ export PATH=${string/substring/replacement}
Shalom Alexander
sumber
0

Perintah builtin shell export Tidak menentukan apakah suatu variabel diatur atau tidak, itu menentukan apakah variabel dan nilainya juga diatur dalam sub-proses.

Mengubah variabel, yang diekspor atau tidak, tidak memengaruhi proses induk atau di atasnya, jadi mengubahnya dalam skrip tidak akan berpengaruh kecuali skrip tersebut dijalankan dengan source .

Fungsi shell:

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

akan memotong komponen terakhir dari variabel PATH. Its exportStatus tidak terpengaruh.

David Ledger
sumber
0

menyatakan -x PATH = "/ diinginkan / path / you_want" jika saya tidak salah itu sendiri akan memperbarui apa yang Anda inginkan dan itu sepenuhnya atas perintah Anda apa yang akan terjadi. [Pastikan Anda menjalankan sebagai root DAN sebagai pengguna yang diinginkan agar perubahan ini ingin Anda pengaruhi] Untuk menjadi ganda, jalankan ENV sesudahnya untuk memastikan bahwa $ PATH telah diubah secara efektif seperti yang Anda inginkan. (Ini dapat digunakan untuk mengubah salah satu output yang akan Anda dapatkan ketika Anda menjalankan '/ usr / bin / env'. Meskipun saya tidak tahu apakah itu permanen atau tidak. Dalam hal itu lakukan seperti yang dinyatakan di atas dan ubah ~ / .bashrc untuk untuk menempel)

Jake Baldwin
sumber