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

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

当我 echo $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 变量是否不同?

答案1

/etc/paths是用于设置$PATHshell 进程的一部分。当您打开新的终端窗口时,它会启动bash,并运行多个启动脚本:/etc/profileAND ~/.bash_profileOR(如果不存在)~/.bash_loginOR(如果也不存在)~/.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.

答案2

我首先要检查修改的地方是,

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

如果您使用的不是 Bash,请检查其配置文件以查看是否提及 PATH。

相关内容