Назад | Перейти на главную страницу

Работа с командами оболочки, которые выбрасывают старый вывод

Есть несколько команд оболочки, которые отбрасывают старый вывод. Я видел пару Нос и Хадсон. Я имею в виду, что когда программа запущена, она производит много текстового вывода в оболочке, но когда вы прокручиваете вверх, вы не видите старый вывод, только команды, которые вы использовали перед вы даже набрали исходную команду.

Это сводит меня с ума, потому что важная информация проглатывается. Как мне заставить эти программы перестать делать это?

Подобные вещи обычно являются результатом работы программы, которая напрямую управляет терминалом и самостоятельно перемещает курсор. Например, это то, что делают такие редакторы, как vi - если вы попытаетесь прокрутить оболочку назад после сеанса vi, вы увидите только текст на последней странице вывода vi, а не все, что вы просматривали.

Способы борьбы с этим:

  • Используйте такой инструмент, как screen (1), и включите ведение журнала (ctrl-A H). Тогда вы сможете просмотреть журнал позже. Это может показать более полезную информацию.
  • Попробуйте использовать tee (1) для захвата вывода, когда он проходит с command | tee output.txt
  • Определите, как отключить любой необычный режим вывода в программе, которую вы запускаете, и заставить ее выдавать простой текст.

Для последнего есть несколько вещей, которые вы можете попробовать. Сначала посмотрите на аргументы команды и посмотрите, есть ли что-нибудь вроде -nostty или что-нибудь говорит о dumb terminals.

Вы также можете попробовать заставить программу думать, что она находится на тупом терминале, например:

TERM=dumb command

(при условии, что оболочка bash), и это может заставить программу думать, что она работает на тупом терминале, и заставить ее вернуться к прямому текстовому выводу.

Вы также можете попробовать ввести в программу какой-либо ввод, и это может вызвать простой режим вывода текста:

echo blarg | command

или, может быть

echo blargh | command -

если программа принимает - как указание на чтение из стандартного ввода.

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

Метод, который сработал для меня, делает следующее:

my_command my_args >log 2>&1

В котором весь вывод хранится в файле с именем log.

Затем в отдельном окне оболочки я делаю следующее:

tail -f log

Что показывает файл журнала как my_command пишет в него.