Как записать вывод Portage в текстовый файл?

Как записать вывод Portage в текстовый файл?

Я хотел бы иметь возможность записывать вывод команд Portage, а также других команд, которые я выполняю в tty (то есть, широкоэкранные терминалы, начинающиеся с Ctrl+ Alt+ , где n представляет собой целое число от 1 до 6. Насколько мне известно, эти терминалы запускаются с помощью команды), где нет буфера обмена, в текстовый файл. Сейчас я читаю наFngettyФорумы Ubuntuчто, возможно, команда Unix catмогла бы сделать это, если бы использовалась правильно. К сожалению, следуя предложенной там команде, похоже, не добавляется полный вывод команды emergeв текстовый файл. Смотрите, я запустил:

emerge dev-qt/qtwayland > cat >> /home/fusion809/output.txt

где fusion809 — мое имя пользователя, и он записал только четыре строки вывода в output.txt, а именно:

Calculating dependencies  ....... .. ....... done!
[ebuild   R    ] media-libs/mesa-11.0.4  USE="-wayland*" ABI_X86="32*"
[ebuild   R    ] dev-qt/qtgui-5.5.1  USE="-egl* -evdev* -ibus*"
[ebuild   R    ] dev-qt/qtwayland-5.5.1  USE="-egl*"

Я также попробовал:

emerge dev-qt/qtwayland > /home/fusion809/output.txt

и:

emerge dev-qt/qtwayland >> /home/fusion809/output.txt

Оба из них записали один и тот же вывод в output.txt.

решение1

Вы на правильном пути. В Unix/Linux также есть поток ошибок. Каждая команда получает стандартный ввод, стандартный вывод и стандартную ошибку.

Вы работали со стандартным выводом. Чтобы также захватить стандартный поток ошибок из команды, используйте 2>. Например:

emerge dev-qt/qtwayland > emerge.out 2> emerge.err

Теперь, если вам нужен стандартный выводиошибка, чтобы перейти втакой жефайл, используйте его, 2>&1чтобы указать оболочке отправлять стандартный вывод ошибок в то же место, что и стандартный вывод:

emerge dev-qt/qtwayland > emerge.out 2>&1

Кроме того, если вам нужна дополнительная информация или вы хотите узнать больше, вы всегда можете найти ее на странице руководства по оболочке man sh.

Спасибо за содержательный и продуманный вопрос!

решение2

  1. вам это не нужно > cat. на самом деле, это просто создает еще один файл с именем catв текущем каталоге. и если вы хотели ввести | cat, это лишнее, вы можете перенаправить вывод, не передавая его через cat.

  2. emerge dev-qt/qtwayland > /home/fusion809/output.txtбудет сохранятьВСЕвывода stdout вашей emergeкоманды в /home/fusion809/output.txt. ВЕСЬ. если в файле только 4 строки, это потому, что emergeна stdout выведено только 4 строки.

  3. emerge мог вывести больше информации в stderr. если вы хотите захватить и это, попробуйте emerge dev-qt/qtwayland >& /home/fusion809/output.txt. Это перенаправит и stdout, и stderr в один и тот же файл.

  4. разница между >и >>заключается в том, что она >стирает файл, если он существует до его создания, и >>добавляет его к файлу, если он уже существует, или создает его, если его нет (в зависимости от параметров оболочки).

  5. если вы хотите записать вывод в файлИвидеть его на экране в то же время, используйте tee. Например:

emerge dev-qt/qtwayland |& tee -a /home/fusion809/output.txt

teeопция -aуказывает ему добавлять данные, а не стирать и перезаписывать.

Связанный контент