如何找到在 Bash 中定义常量的地方

Ryt*_*kna 3 bash bashrc

我至少需要找到一个$JAVA_HOME定义(导出)的文件。除了在文件中搜索文本之外,还有什么聪明的方法可以做到这一点?

Joh*_*024 9

要查找哪个文件定义了JAVA_HOME,请运行:

PS4='+ $BASH_SOURCE:$LINENO:' BASH_XTRACEFD=7 bash -xlic ""  7>trace.out
Run Code Online (Sandbox Code Playgroud)

这将为bash登录 shell生成调试输出并将其保存到文件中trace.out。该文件中会有很多行。线条看起来像:

+ /etc/profile:7:PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
+ /etc/profile:9:export PATH
Run Code Online (Sandbox Code Playgroud)

这显示 (a) 当前正在执行的文件的名称,(b) 行号,以及 (c) 该文件中该行的调试输出。只需在其中搜索JAVA_HOME. 例如:

grep JAVA_HOME trace.out
Run Code Online (Sandbox Code Playgroud)

这个怎么运作

  • PS4='+ $BASH_SOURCE:$LINENO:'

    创建执行跟踪时,bash将在每一行前面加上PS4. 在这里,我们让PS4显示正在读取的源文件和行号。

  • BASH_XTRACEFD=7

    这将发送执行跟踪,7该跟踪是选择的文件描述符,希望它不会被bash启动文件弄乱。

  • bash -xlic ""

    这将使用 options 启动 bash -x,这会导致所有命令与PS4提示一起显示,提示将-lbash视为登录 shell,-i这使 shell 具有交互性,并-c ""在初始化完成后使新 shell 退出。

  • 7>trace.out

    这会将跟踪输出重定向到文件。