9

Я пытаюсь отладить действия 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, но его команды не выводятся. Есть ли обходной путь без обновления? Это связано с разницей версий?

2 ответа2

1

set -x где-нибудь в корневом файле (тот, который требует всех других файлов) должен работать. В качестве альтернативы, введите что-то вроде [[ !-z "$DEBUG" ]] && set -x в каждом файле и вызовите с DEBUG=1 script.sh .

0

Поскольку вы используете сценарии и не выполняете их, ваша первая команда в основном сценарии должна быть «set -x»

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .