如何在Mac上从$PATH中删除条目

101
我尝试安装Sencha Touch SDK工具2.0.0,但无法正确运行。它在$PATH变量中创建了一个条目。 后来我删除了sencha sdk工具文件夹,但没有意识到路径变量仍然存在。
当我执行echo $ PATH时,结果如下: /Applications/SenchaSDKTools-2.0.0-beta3:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin 我搜索了如何从$ PATH中删除变量,并按照以下步骤进行:
  1. 输入命令PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin"
  2. 执行echo $PATH,结果显示为/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin
  3. 输入命令export PATH
  4. 关闭终端并重新打开。执行echo $PATH,这次我得到了 /Applications/SenchaSDKTools-2.0.0-beta3:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin
请问我做错了什么?
10个回答

223
  1. echo $PATH 并复制它的值
  2. export PATH=""
  3. export PATH="/你想保留的路径"

3
请注意,在运行export PATH=""之后,您可能会看到诸如以下错误: -bash: tail: 没有那个文件或目录 -bash: sed: 没有那个文件或目录这是正常现象。 - schalkneethling
Quite direct!! Thank you - analyst_47
export PATH="" is throwing error as zsh: bad assignment - Pawan
@Pawan 有没有可能是你在等号之间漏掉了空格?例如:这将显示错误,export PATH ="" - jokenge
我尝试过并确保有空格。但是仍然出现了错误的赋值。 - elnaz fathi

41

请检查以下文件:

/etc/bashrc
/etc/profile
~/.bashrc
~/.bash_profile
~/.profile
~/.MacOSX/environment.plist

这些文件中可能有一些不存在,但它们很可能包含$PATH定义。


在/etc目录下的bashrc和~/目录下的bashrc有什么区别? - Tushar Koul
2
/etc中的那个会影响所有用户,而在你的主目录(~)中的那个只会影响你自己。而~/.bashrc中的设置会覆盖/etc/bashrc中的设置。 - Ansgar Wiechers
对我来说,在~/.profile中进行更改有效。我正在使用MAC OS X El Capitan。我认为默认情况下,它是从~/.profile中获取的。 - Crocode
其他选项:~/.zshrc~/.zprofile - Noumenon
@AnsgarWiechers 你还应该将 /etc/paths 文件和 /etc/paths.d 目录添加到列表中。 - ObiHill
显示剩余2条评论

32

在 MAC OS X Leopard 及以上版本中

cd /etc/paths.d

可能在上述目录中有一个文本文件,其中包含您正在尝试删除的路径。

vim textfile //check and see what is in it when you are done looking type :q 
//:q just quits, no saves

如果这是你想要删除的内容,则执行以下操作

rm textfile //remove it, delete it

这里有一个链接指向一个网站,它提供了更多信息,即使它是关于'添加'路径的。但是,你可能会获得一些见解。


18

您当前所做的操作是针对当前会话有效(仅限于您正在工作的终端)。 您需要将这些更改保留下来。 请考虑将步骤1-3中的命令添加到您的${HOME}/.bashrc文件中。


4
抱歉,我没有完全理解你的意思。在哪里添加 ${HOME}.bashhrc 命令? - Tushar Koul
1
我知道这些命令对当前终端会话有效,所以我认为“export”会起作用。 - Tushar Koul
将步骤1和3中的命令添加到文件${HOME}/.bashrc的末尾。打开一个新终端并执行echo $PATH - devnull
仅仅使用export VARIABLE=VALUE命令并不能使VARIABLE在所有会话中持久化。你需要在启动文件中声明,例如${HOME}/.bashrc或者/etc/profile(如果更改是针对系统上的所有用户)。 - devnull
1
在bash_profile中添加帮助我将其从PATH变量中删除。我使用sudo nano ~/.bash_profile打开它。 - Tushar Koul
显示剩余2条评论

11

如果你要删除仅适用于Python 3的路径,我在~/.zprofile~/.zshrc中找到了它。


7

$PATH 包含从实际文件引用的数据。 因此,您应该找到包含要删除的引用的文件,然后删除该引用。

这是一个逐步运行的好列表 [从 @Ansgar的 答案中复制并进行了小幅更新]。

/etc/bashrc
/etc/profile
~/.bashrc
~/.bash_profile
~/.profile
~/.MacOSX/environment.plist
/etc/paths
/etc/paths.d/

请注意,/etc/paths.d/是一个包含路径引用文件的目录。例如,在此目录中可能会有一个名为fancy-app的文件,而在该文件内部,您将看到以下条目:
/path/to/fancy-app

这个路径会出现在你的$PATH中,你可以删除文件中的这个条目来移除它,或者如果这个文件只有一个你想要移除的参考,你也可以删除整个文件。


这正是我需要找到罪魁祸首的东西。/etc/paths.d/有错误的条目。谢谢@BannerMan。 - Brod

4

在终端窗口中使用sudo pico /etc/paths,将条目更改为要删除的内容,然后打开新的终端会话。


1
将来我建议你在回答问题之前先阅读问题的正文。 - Mike Furlender
3
还要记得查看/etc/paths.d/目录下的内容。 - zapstar
答案对于不了解 /etc/paths.d/ 的人来说是不完整和误导性的。 - sajid

0

当您登录或启动bash shell时,环境变量会根据.bashrc或.bash_profile进行加载/配置。无论您正在执行哪个导出操作,它仅对当前会话有效。因此,export PATH=/Applications/SenchaSDKTools-2.0.0-beta3:$PATH这个命令每次打开shell时都会被执行,您可以覆盖它,但再次提醒,这只会在当前会话中生效。编辑.bashrc文件以满足您的需求。如果它说权限被拒绝,也许文件是受写保护的,是其他文件的链接(许多组织保留一个主.bashrc文件并向每个用户提供其主目录的链接,您可以复制该文件而不是链接,在其上添加内容)。


0

关闭终端(结束当前会话)。然后再次打开。


0
如果在关闭终端并重新打开后手动export $PATH方法似乎无效,一定要检查shell配置文件
我发现一个小脚本每次打开时都会在$PATH前面添加更多路径。 对于zsh,您可以检查~/.zshrc文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接