Я хотел бы иметь возможность записывать вывод команд 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
вам это не нужно
> cat
. на самом деле, это просто создает еще один файл с именемcat
в текущем каталоге. и если вы хотели ввести| cat
, это лишнее, вы можете перенаправить вывод, не передавая его через cat.emerge dev-qt/qtwayland > /home/fusion809/output.txt
будет сохранятьВСЕвывода stdout вашейemerge
команды в/home/fusion809/output.txt
. ВЕСЬ. если в файле только 4 строки, это потому, чтоemerge
на stdout выведено только 4 строки.emerge мог вывести больше информации в
stderr
. если вы хотите захватить и это, попробуйтеemerge dev-qt/qtwayland >& /home/fusion809/output.txt
. Это перенаправит и stdout, и stderr в один и тот же файл.разница между
>
и>>
заключается в том, что она>
стирает файл, если он существует до его создания, и>>
добавляет его к файлу, если он уже существует, или создает его, если его нет (в зависимости от параметров оболочки).если вы хотите записать вывод в файлИвидеть его на экране в то же время, используйте
tee
. Например:
emerge dev-qt/qtwayland |& tee -a /home/fusion809/output.txt
tee
опция -a
указывает ему добавлять данные, а не стирать и перезаписывать.