“ echo $ PATH”和/ etc / paths有什么区别?


10

当我回声$ PATH我得到这个:Users/myusername/.node_modules_global/bin:/Users/mac/.node_modules_global/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/mac/Library/Android/sdk/platform-tools:/platform-tools

我想从中删除一些路径,但是当我使用命令打开文件时vim /etc/paths,得到以下结果:

/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin

文件/ etc / paths是否与$ PATH变量不同?


哪个版本的OS X?我没有/etc/paths我的,但我在跑步10.4.11,从那以后事情可能发生了变化
Fox

1
但是根据对AskDifferent的回答/etc/paths它用于生成默认值$PATH,您可以稍后对其进行修改
Fox

这是默认值。由用户启动他们的壳的时间,不过,这将是由壳源,如其他文件修改~/.bashrc~/.profile
谢尔盖Kolodyazhnyy

Answers:


14

/etc/paths$PATH用于shell程序设置的一部分。当您打开一个新的“终端”窗口时,它将启动bash,并运行多个启动脚本:/etc/profileAND ~/.bash_profileOR(如果不存在)~/.bash_login或(如果也不存在)~/.profile。这些脚本设置了shell环境,包括$PATH

做的事情之一/etc/profile是运行/usr/libexec/path_helper,它读取/etc/paths并读取文件中的任何文件/etc/paths.d并将其内容添加到$PATH。但是,这仅仅是一个起点。您自己的启动脚本(如果有的话)可以添加$PATH,编辑,完全替换等。

在我看来,您的启动脚本(和/或它运行的东西)正在向其获取的基本集中添加许多条目/etc/paths。“ Users / myusername / .node_modules_global / bin:/Users/mac/.node_modules_global/bin:”被添加到$PATH(表示将首先搜索这些目录)的开头,并添加“:/ Users / mac / Library / Android / sdk / platform-tools:/ platform-tools“添加在末尾。如果您想确切地了解添加它们的内容,则需要查看启动脚本。

顺便说一句,此设置过程$PATH仅适用于bash“登录” shell。由bash shell运行的任何内容都$PATH将从其继承,因此可能具有本质上相同的东西。bash非登录shell遵循略有不同的设置过程。其他shell,以及根本不是从shell开始的事情(例如cron作业)可能具有完全不同的东西$PATHs


请注意,对于非登录外壳程序(例如/usr/local/bin/bash,由安装程序安装brew,不带-l参数),/usr/libexec/path_helper不使用,并且/usr/local/bin默认情况下不包含在外壳程序中$PATH。要path_helper在脚本中或以交互方式使用,命令为eval $(/usr/libexec/path_helper)
凯尔·斯特兰德

0

我要检查的第一个地方是

~/.profile
~/.bashrc
~/.bash_profile

如果您使用的不是Bash,请检查配置文件以查看有关PATH的任何信息。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.