如何在 Bash 中找到常量定义的位置

如何在 Bash 中找到常量定义的位置

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

答案1

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

PS4='+ $BASH_SOURCE:$LINENO:' BASH_XTRACEFD=7 bash -xlic ""  7>trace.out

这将为登录 shell 生成调试输出bash并将其保存到文件trace.out。该文件中将有许多行。这些行如下所示:

+ /etc/profile:7:PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
+ /etc/profile:9:export PATH

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

grep JAVA_HOME trace.out

怎么运行的

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

    当创建执行跟踪时,bash将在每行前面添加扩展名PS4。在这里,我们PS4显示正在读取的源文件和行号。

  • BASH_XTRACEFD=7

    这会将执行跟踪发送到7所选的文件描述符,希望bash启动文件不会干扰该文件描述符。

  • bash -xlic ""

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

  • 7>trace.out

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

相关内容