Как найти место, где константа определяется в Bash

Я должен найти, по крайней мере, файл где $JAVA_HOME определяется (экспортируемый). Там какой-либо умный путь состоит в том, чтобы сделать это помимо текстового поиска в файлах?

3
задан 2 March 2015 в 10:23

1 ответ

Найти, который определяет файл JAVA_HOME, выполненный:

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

Это генерирует вывод отладки для a 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 ""

    Это запускает удар с опций -x, который заставляет все команды быть отображенными с PS4 подсказка, -l который сообщает bash рассматривать это как оболочка входа в систему, -i который делает оболочку интерактивной, и -c "" который заставляет новую оболочку выйти, после того как инициализация завершена.

  • 7>trace.out

    Это перенаправляет вывод трассировки в файл.

8
ответ дан 1 December 2019 в 13:17

Другие вопросы по тегам:

Похожие вопросы: