我至少需要找到一个$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
这会将跟踪输出重定向到文件。