如何查找设置了 $PATH 的所有位置

Aar*_*ain 3 grep oracle-database path environment-variables linux-mint

我想知道是否有办法确定 $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 上运行它。

mur*_*uru 6

调试 shell 初始化的一种方法是运行登录交互式 shell ( -li) 并告诉它在执行时打印所有命令,并在输出中查找您想要的内容:

PS4=' $BASH_SOURCE:$LINENO: ' bash -lixc true |& grep oracle
Run Code Online (Sandbox Code Playgroud)

PS4bash 使用它来打印选项中的额外信息-x,当设置为 时$BASH_SOURCE:$LINENO,它将打印正在获取的文件的路径和正在执行的行号。运行 with-c true |& grep oracle可以让我们快速过滤单个 shell 的初始化。通过前导空格,bash 在发生嵌套采购时会出现行。