如何查找設置了 $PATH 的所有位置
我想知道是否有辦法確定 $PATH 變數的特定部分的設置位置。
大約一年半前,我經歷了在我的機器上設置 Oracle XE 11.2.0 的繁瑣過程,用於我正在學習的課程。在此過程中的某處,我將路徑“/u01/app/oracle/product/11.2.0/xe/bin”添加到我的 $PATH 變數中以使事情正常進行。好吧,現在我已經刪除了 Oracle DB 專用的根 /u01/ 文件夾,因此 bash 在啟動時會拋出文件或目錄不存在的錯誤。因此,我手動查看了所有可以找到的文件,但什麼也沒有。
據我所知, $PATH 的那部分沒有在以下任何文件中設置:
/etc/login.defs
,~/.profile
,/etc/environment
,/etc/profile
,~/.bash_login
,~/.bash_profile
或~/.bashrc
.這首先通過
cat ~/.bashrc | grep "*oracle*"
在上面列出的每個文件上執行來驗證。我什至做了一件瘋狂的事,跑去sudo strings /dev/sdb -n 11 | grep -C100 "/u01/app/oracle/*"
給我一個包含該字元串的每個文件的列表。我得到了很多結果,但沒有什麼特別有價值的。我可憐的 SSD 不值得。那麼有什麼竅門嗎?如何找出 $PATH 的那部分被連接到的位置?還有其他我應該檢查的典型文件嗎?如果縮小範圍,我將在 Linux Mint 18.3 上執行它。
調試 shell 初始化的一種方法是執行一個登錄、互動式 shell (
-li
) 並告訴它在執行所有命令時列印它們,並在輸出中查找您想要的內容:PS4=' $BASH_SOURCE:$LINENO: ' bash -lixc true |& grep oracle
PS4
被 bash 用於列印-x
選項中的額外資訊,當設置為 時$BASH_SOURCE:$LINENO
,它將列印所獲取文件的路徑和正在執行的行號。執行 with-c true |& grep oracle
允許我們快速過濾單個 shell 的初始化。使用前導空格,bash 在嵌套採購發生時打算使用行。