端末コマンドを使用してシステムパス( `$ PATH`)からパスを削除する方法


10

次のコマンドを$PATH実行して、システムパス()にディレクトリパスを追加しました。

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

今、私の道はこのように見えます、

$エコー$ 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

/home/avinash/Desktop/rajコマンドを使用してシステムパス変数から削除したい(パスの追加時にexportコマンドが行うように)。


あなたはどこに輸出の声明を出しましたか?
souravc

gnomeターミナル(ctrl + alt + t)
Avinash Raj

回答:


14

実行export PATH=$PATH:/...してもPATHシステム全体には影響しません。これは単なるシェル変数です。新しいシェルとBOOMを起動してください。明らかにそれを~/.bashrc(または別の環境のブートストラップファイルに)追加した場合、その変更を元に戻す必要がありますが、ここでは問題のように聞こえません。

新しいシェルを開始したくない場合は、手動で削除して設定できます。

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

1つの汚いハックは

export PATH="$( echo $PATH| tr : '\n' |grep -v raj | paste -s -d: )"
  1. を使用してPATHで各ディレクトリを区切ります tr
  2. を使用してgrep -v、不要なもの(「raj」に一致するパス)を削除し、
  3. を使用して、「:」で区切られた長い文字列に折りたたみますpaste

これはおそらく、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

シェル組み込みコマンドexportは、変数が設定されているかどうかを判断せず、変数とその値もサブプロセスで設定されているかどうかを判断します。

エクスポートされているかどうかに関係なく、変数を変更しても親プロセス以上には影響がないため、スクリプトをで実行しない限り、スクリプトで変更しても効果はありませんsource

シェル関数:

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

PATH変数の最後のコンポーネントを削除します。そのexportステータスは影響を受けません。


0

-x PATH = "/ desired / path / you_want"を宣言します。もし私がそれ自体があなたが望むものを更新し、それが何であるかを完全にあなたの望み通りに更新するのは間違いではありません。[ルートとして実行し、この変更を適用する対象のユーザーとして実行してください]念のため、後でENVを実行して、$ PATHが効果的に変更されていることを確認してください。(これは、「/ usr / bin / env」を実行したときに得られる出力を変更するために使用できます。永続的かどうかはわかりませんが、その点については、上記のようにして〜/ .bashrcを固執する)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.