我至少需要找到一个$JAVA_HOME定义(导出)的文件。除了在文件中搜索文本之外,还有什么聪明的方法可以做到这一点?
要查找哪个文件定义了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提示一起显示,提示将-l其bash视为登录 shell,-i这使 shell 具有交互性,并-c ""在初始化完成后使新 shell 退出。
7>trace.out
这会将跟踪输出重定向到文件。