Узнайте, какие сценарии запускаются bash при запуске

После запуска терминала bash я заметил, что переменная PATH содержит повторяющиеся записи. Мой терминал запускает оболочку входа в систему , поэтому ~/.bash_profile отправляется, а затем ~/.profile и ~/.bashrc . Только в ~/.profile я создаю записи путей, которые дублируются.

Чтобы быть педантичным, это порядок, в котором находятся файлы, которые ДОЛЖНЫ быть получены из источников:

 Sourced /etc/profile Sourced /etc/bash.bashrc Sourced .bash_profile Sourced .profile Sourced .bashrc 

Прежде чем кто-либо отметит это как дубликат «PATH variable содержит дубликаты», продолжайте читать.

Сначала я думал, что это связано с тем, что файл ~/.profile был получен дважды, поэтому я записывал файл в файл журнала всякий раз, когда он был получен, и, как ни удивительно, он регистрировал только одну запись, которая говорит мне, что она была получена только один раз. Еще более удивительным является тот факт, что когда я комментирую записи, которые были в ~/.profile , записи все еще появляются в переменной PATH . Это привело меня к трем выводам, один из которых был быстро исключен:

  1. Bash игнорирует действительные комментарии bash и по-прежнему выполняет прокомментированный код
  2. Существует сценарий, который читает файл ~/.profile и игнорирует любой код, который печатает результат (например, файл журнала)
  3. Существует еще одна копия моего ~/.profile который находится в другом месте

Первый, я быстро пришел к выводу, что это не так, из-за быстрого тестирования. Второй и третий варианты – это то, где мне нужна помощь.

Как я могу собрать журнал сценариев, которые запускаются при запуске моего терминала? Я использовал echo в файлах, которые я проверил, чтобы узнать, получены ли они из bash, но мне нужно найти окончательный метод, который отслеживает выполнение до того момента, когда терминал будет готов для начала ввода в него.

Если выше это невозможно, тогда кто-нибудь может предложить, где еще я могу посмотреть, какие сценарии запускаются

Если ваша система имеет strace вы можете указать файлы, открытые оболочкой, например, используя

 echo exit | strace bash -li |& less | grep '^open' 

( -li означает интерактивную оболочку интерактивного взаимодействия, используйте только -i для интерактивной оболочки без входа.)

Это покажет список файлов, которые оболочка открыла или попыталась открыть. В моей системе они выглядят следующим образом:

  1. /etc/profile
  2. /etc/profile.d/* (различные скрипты в /etc/profile.d/ )
  3. /home/<username>/.bash_profile (это не удается, у меня нет такого файла)
  4. /home/<username>/.bash_login (это не удается, у меня нет такого файла)
  5. /home/<username>/.profile
  6. /home/<username>/.bashrc
  7. /home/<username>/.bash_history (история командной строки, это не скрипт)
  8. /usr/share/bash-completion/bash_completion
  9. /etc/bash_completion.d/* (различные скрипты, обеспечивающие функциональность автозаполнения)
  10. /etc/inputrc (определяет привязки клавиш, это не скрипт)

Используйте man strace для получения дополнительной информации.