取消设置特定的 PATH 变量?

取消设置特定的 PATH 变量?

我有以下路径。

PATH=/home/josemserrajr/anaconda3/bin:/home/josemserrajr/bin:/homejosemserrajr/anaconda3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/us

我想取消设置其中一个变量,方法如下:

unset PATH=/homejosemserrajr/anaconda3/bin:

答案1

PATH 实际上是一个单一变量,它有一个字符串值。该值由目录路径组成,这些路径以冒号 ( ) 分隔:

通常,您的 PATH 变量在文件中定义并导出~/.profile,您可以使用自己喜欢的文本编辑器对其进行编辑。如果找不到/home/josemserrajr/anaconda3/bin添加的位置,您可以重置 PATH 变量,并使用以下命令从字符串中明确删除该路径:

export PATH="$(echo "$PATH" | sed 's|/home/josemserrajr/anaconda3/bin||g' | sed 's|^:*||' | sed 's|:*$||')"

该命令使用一些bashsed来执行以下操作:

  1. /home/josemserrajr/anaconda3/bin从当前 PATH 值中删除所有出现的字符串。
  2. ^:*从步骤 1 的结果字符串中删除任何(0 个或多个)前导冒号(与正则表达式匹配)。
  3. :*$从步骤 2 的结果字符串中删除任何(0 个或多个)尾随冒号(与正则表达式匹配)。
  4. 将步骤 3 的结果字符串保存到 PATH 变量中(覆盖旧值)。
  5. 将新的 PATH 值导出到您的环境,以便应用程序可以访问它。

通过将此命令添加到文件末尾,~/.profile您应该能够从 PATH 变量中删除不需要的路径。

答案2

您可以使用参数扩展从变量的值中删除子字符串。例如,给定

echo "$var"
/home/josemserrajr/anaconda3/bin:/home/josemserrajr/bin:/homejosemserrajr/anaconda3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/us

然后要删除子字符串的第一个实例/homejosemserrajr/anaconda3/bin:,您可以使用

$ echo "${var/\/homejosemserrajr\/anaconda3\/bin:}"
/home/josemserrajr/anaconda3/bin:/home/josemserrajr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/us

(请注意,反斜杠用于转义路径中的文字斜杠)。要将此应用于您的PATH

PATH="${PATH/\/homejosemserrajr\/anaconda3\/bin:}"

相关内容