bash: установить -x журналы в файл

Если вы хотите сбросить все свои личные настройки, вы должны удалить все скрытые файлы в своем домашнем каталоге с помощью excetchion .bash_logout, .bashrc, .profile (эти три файла копируются из /etc/skel при создании пользователя).

Не всегда просто удалять настройки для конкретного приложения, поскольку скрытый файл или каталог, которые он создает, обычно при первом запуске, иногда может иметь имя очень загадочное (например,

Помимо патологических случаев поиск, подобный

find ~ -iname '*appname*'

, должен дать хороший намек на то, что удалить, чтобы сбросить приложение

all

Как отметил @htorque в комментарии ниже, в скрытых файлах и каталогах могут быть также данные, так как письма под .evolution , закладки браузера под .mozilla/firefox и т. п.

Итак, как всегда, у вас есть резервная копия ваших разумных данных.

1
задан 12 August 2016 в 15:43

2 ответа

Основываясь на этом ответе ServerFault Отправьте вывод bash -x в файл журнала без прерывания стандартного вывода, современные версии bash включают в себя BASH_XTRACEFD специально для указания альтернативного файлового дескриптора для вывода set -x

Например, вы можете сделать

#!/bin/bash

exec 19>logfile
BASH_XTRACEFD=19

set -x
command1
command2
...

для отправки вывода set -x в файл logfile при сохранении стандартных стандартных выходов и стандартных потоков ошибок для следующих команд.

Обратите внимание, что использование fd 19 произвольно - это просто должен быть доступный дескриптор (т. Е. Не 0, 1, 2 или другой номер, который вы уже выделили).

12
ответ дан 23 May 2018 в 07:12
  • 1
    Он действительно сохраняет журнал трассировки bash отдельно, однако очень сложно прочитать 2 выхода (stdout + stderr на экране и трассировку bash в файлах журналов), поскольку они полностью не синхронизированы. См. решение, что я только что опубликовал . – redseven 30 January 2018 в 19:28

Steeldriver дал вам один подход. В качестве альтернативы вы можете просто перенаправить STDERR в файл:

script.sh 2> logfile

Это, однако, означает, что и выход, созданный с помощью опции set -x и любых других возникших ошибок, будет отправлен в файл. Решение Steeldriver будет перенаправлять вывод set -x, который, вероятно, вы хотите.

3
ответ дан 23 May 2018 в 07:12
  • 1
    «... как вывод, созданный параметром set -x, так и любые другие возникшие сообщения об ошибках, будут переданы в файл. & Quot; И поэтому это не работает для меня. Моя основная проблема заключается в том, что я не просто вижу «реальные ошибки», потому что весь этот вывод bash идет на stderr. Перенаправление сообщений об ошибках команд также спрячет меня «реальные ошибки». по-другому. – redseven 25 October 2016 в 18:09
  • 2
    @redseven Я боюсь, что вы просите, это не очень ясно. Не могли бы вы изменить свой вопрос и уточнить? Старайтесь избегать использования термина «выход». для чего-то, что не собирается выходить. Вы хотите отделить i) нормальный выход; ii) любые ошибки, вызванные вашей командой, и iii) установить -x? Разве это не так? Если нет, покажите нам простой скрипт, который мы можем скопировать и сообщить нам, как вы хотите, чтобы он себя вел. – terdon♦ 25 October 2016 в 18:42
  • 3
    @steeldriver уже отлично ответил на вопрос. – redseven 28 October 2016 в 15:38
  • 4
    @redseven ах, тогда прохладно. Поскольку ваш комментарий пришел намного позже, я думал, что вам все еще нужно что-то, и я не мог понять, как ответ steeldriver не смог решить вашу проблему. Рад, что все это отсортировано. – terdon♦ 28 October 2016 в 15:41

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

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