Рейтинг:3

Как я могу просмотреть stdout / stderr из оболочки входа в систему bash?

флаг cn

Я пытаюсь отладить странную проблему с моим ~/.bash_profile, и я хотел бы видеть, есть ли какие-либо ошибки / etc, напечатанные при его запуске. Есть ли какой-то журнал или что-то подобное, который содержит стандартный вывод и/или стандартный вывод процесса оболочки входа в систему? Спасибо!

muru avatar
флаг us
Если они есть, обычно они печатаются в терминале, в котором вы запускали эту оболочку.
stumblebee avatar
флаг mx
@muru Я думал то же самое, я создал ошибку в `~/.profile` без существования `~/.bash_profile` , сообщение об ошибке не прошло. Проверьте мой неудаленный ответ.
muru avatar
флаг us
Новые вкладки терминала @stumblebee не будут запускать оболочки входа в систему, если вы не настроите свой эмулятор терминала таким образом.
stumblebee avatar
флаг mx
@muru Вы абсолютно правы, сэр! ~./.bashrc делает, а ~/.profile нет. Я должен был запустить `sudo login`. Я сведусь к моему первоначальному ответу и смирюсь с позором.
vanadium avatar
флаг cn
Вы можете получить файл в своем текущем терминале: `source .bash_profile`
sancho.s ReinstateMonicaCellio avatar
флаг pl
Привет. Есть ли у вас какие-либо отзывы о том, что было предложено? Это необходимо для сообщества.
Рейтинг:0
флаг pl

Для отладки сценария bash у вас есть несколько вариантов, и некоторые из них даже более эффективны, чем перенаправление stdout/stderr.

Активировать след

Вы можете добавить к своему ~/.bash_profile (создание трассировки только для определенных частей вашего скрипта) с

set -x # активировать отладку отсюда
<команды>
set +x # остановить отладку отсюда

Также, установить -v печатает строки ввода оболочки по мере их чтения, и установить +v деактивирует это. Только с этим вы, вероятно, поймаете проблему.

Перенаправить трассировку

Использовать Переменная Баша BASH_XTRACEFD

Если задано целое число, соответствующее допустимому файловому дескриптору, Bash запишет вывод трассировки, сгенерированный, когда «set -x» включен, в этот файловый дескриптор. Это позволяет отделить выходные данные трассировки от диагностических сообщений и сообщений об ошибках. Дескриптор файла закрывается, когда BASH_XTRACEFD сбрасывается или ему присваивается новое значение. Сброс BASH_XTRACEFD или присвоение ему пустой строки приводит к тому, что вывод трассировки отправляется в стандартную ошибку. Обратите внимание, что установка для BASH_XTRACEFD значения 2 (стандартный дескриптор файла ошибок) и последующая его отмена приведет к закрытию стандартной ошибки.

Таким образом, вы бы использовали

exec 5> ~/bash_profile_ouput.txt
BASH_XTRACEFD="5"
<команды>
сбросить BASH_XTRACEFD

Печатать номера строк

Использовать Переменная Баша ЛИНЕНОBASH_LINENO, BASH_SOURCE и/или FUNCNAME в более сложных случаях)

echo "Выполнение ${LINENO}"
<команды>

Перенаправить stdout/stderr

Объединить команда исполнитель с перенаправлением и, возможно, тройник. Посмотри ответы здесь, которые также включают в себя другие методы/«трюки», кроме использования исполнитель.

Связанный:

  1. https://stackoverflow.com/questions/44249890/pipe-bash-stdout-only-in-debug-mode
  2. https://unix.stackexchange.com/questions/334382/find-out-what-scripts-are-being-run-by-bash-on-startup
  3. https://unix.stackexchange.com/questions/155551/как-отладить-а-bash-скрипт
Рейтинг:0
флаг cn

Я не пробовал сам, но я уверен, что стандартный вывод и ошибка - это терминал, на котором он работает, как только процесс начинается. Вы можете проверить, введя команду, например эхо "Привет, мир" в вашей .bash_profile...

Рейтинг:0
флаг mx

стандартный вывод и стдерр будет появляться в терминале каждый раз, когда вы входите в систему.Вы должны выйти и снова войти, чтобы изменения в вашем профиле вступили в силу. Дальнейшее объяснение использования ~/.bash_profile предоставлен здесь на Ask Ubuntu с хороший ответ

Ответить или комментировать

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