「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。

相關內容