Мы разрабатываем оболочку в браузере, которая будет передавать все, что выводит оболочка. stdout, stderr, что угодно.
однако, как показывает этот небольшой пример,
git clone https://github.com/joyent/node.git >./git.out
cat ./git.out
большая часть вывода не передается в ./git.out. вот небольшое видео, если вы хотите увидеть, что происходит http://screencast.com/t/7zTdPfq7Pr7
Нам нужны такие команды, как 'top', 'git' для работы, есть идеи, как их получить?
(вывод в файл предназначен только для иллюстрации, мы будем передавать каждую строку вывода в другую систему, мы знаем, что top
это не имело бы смысла, но я надеюсь, что моя точка зрения достаточно ясна для тех, кто может дать понимание. Спасибо.)
Большинство программ имеют два выхода: stdout и stderr. stdout - это то, куда идет "основная" информация. stderr используется для ошибок. Он также используется для различного неважного вывода, а также иногда для таких вещей, как пользовательские подсказки.
Чтобы захватить все это, вам нужно перенаправить stderr на stdout.
somecmd arg1 arg2 arg3 >somefile 2>&1
Или захватить stderr в отдельный файл:
somecmd arg1 arg2 arg3 >stdout.txt 2>stderr.txt
Имейте в виду, что программа МОЖЕТ использовать другие выходные данные, кроме stdout / stderr. Он может определить вашу консоль и в основном "принудительно" выводить туда. Однако это крайне редко, и вышеизложенное будет работать в 99% ситуаций.
Одна вещь, о которой следует помнить, если вы перенаправляете и stdout, и stderr в один и тот же файл, заключается в том, что stdout и stderr buffer по-разному, поэтому в файле журнала он не будет выглядеть так же, как на экране (строки будут не в порядке ). Кроме того, для вашего конкретного экземпляра ваш вывод будет выглядеть как мусор. git выполняет множество манипуляций с терминалом (для индикатора выполнения), и в файле журнала это будет выглядеть довольно ужасно.
РЕДАКТИРОВАТЬ
Из man git-clone
:
--прогресс
Состояние выполнения сообщается в стандартном потоке ошибок по умолчанию, когда он подключен к терминалу, если не указано -q. Этот флаг вызывает состояние прогресса, даже если стандартный поток ошибок не направлен на терминал.