Я пытаюсь отладить действия bash при инициализации входа в систему для Linux. Я читал, что "bash -x" заставит bash распечатать то, что он делает, но он не печатает команды в исходных файлах, как это делает "set -x". Я не могу использовать "set -x", потому что инициализация запускается до того, как я могу его вызвать. "bash -x", кажется, прекрасно работает в OS X, но это может быть из-за версий bash.
Linux: 3.2.25
OS X: 3.2.48
Вот выдержка из однократного поведения в Linux:
bash -l -x -c 'echo 1'
# ... snip ...
+ for i in '/etc/profile.d/*.sh'
+ '[' -r /etc/profile.d/vim.sh ']'
+ '[' '' ']'
+ . /etc/profile.d/vim.sh
+ for i in '/etc/profile.d/*.sh'
+ '[' -r /etc/profile.d/which-2.sh ']'
+ '[' '' ']'
+ . /etc/profile.d/which-2.sh
# ... snip ...
Обратите внимание на источник /etc/profile.d/vim.sh, но его команды не выводятся. Есть ли обходной путь без обновления? Это связано с разницей версий?
bash -l
? Это предназначено для интерактивных оболочек. Скрипт не является интерактивной оболочкой.ssh user@host 'bash -l -c command'
чтобы вы загрузили правильный env. 2) Ты сисадмин и хотите Устранение неполадок , что скрипты инициализации делают , прежде чем ваши прогонов сценария -bash -l -x
покажет вам. Иногда вы хотите знать, где устанавливается переменная env.Поскольку вы используете сценарии и не выполняете их, ваша первая команда в основном сценарии должна быть «set -x»
Теперь все исходные скрипты будут работать в режиме отладки. Помните, что когда вы создаете сценарий, он запускается в вашей текущей оболочке, поэтому, если вы установите -x один раз, это будет хорошо для всех исходных сценариев.
источник