1 Востаннє редагувалося Дмитро-Чебурашка (14.09.2018 10:24:28)

Тема: Текст при роботі бат-файлу перевести в логи!

Доброго часу доби! Я не можу перенаправити усе виведення з кмд-рядка у файл, власне повідомлення про помилки при компіляції так і залишаються в цьому чорному віконці. Бат-файл, перенаправлення у мене виглядає так

mingw32-make -f makefile  >> txt1.txt >> txt2.txt

txt1.txt взагалі не створюється

Допосможить!

2

Re: Текст при роботі бат-файлу перевести в логи!

Логічно, що не створюється - вивід можна лише переспрямовувати, а не дублювати, відповідно, >> txt1.txt ігнорується і все має бути в txt2.txt (окрім помилок, які перенаправляються за допомогою 2>/2>>). Якщо хочете, щоб і помилки, і стандартний вивід йшли в один потік, робіть

mingw32-make -f makefile 2>>&1 >>txt1.txt

(&1 - це "перший потік", основний вивід)

Подякували: Torbins, leofun012

Re: Текст при роботі бат-файлу перевести в логи!

У мене все-таки не виходить перемістити в текстовий файл розгорнуті повідомлення про помилки, а в нього все одно потрапляє лише тільки сама неінформативна і загальна инфа такого роду

../makefile_gcc_target:157: recipe for target '../../gcc/roundheaded32common/roundheaded.o' failed

Ймовірніше всього я чогось не зрозумів

mingw32-make -f makefile 2>>&1 >>txt1.txt

4 Востаннє редагувалося ReAl (15.09.2018 22:56:32)

Re: Текст при роботі бат-файлу перевести в логи!

Дмитро-Чебурашка написав:

Ймовірніше всього я чогось не зрозумів

mingw32-make -f makefile 2>>&1 >>txt1.txt

Просто треба

mingw32-make -f makefile  >>txt1.txt 2>>&1

(до речі, вам точно треба доповнити txt1.txt від попередньої компіляції, чи треба замінити? Якщо друге, то треба не >> а просто >)

Це різні речі.
Покроково, елементи командного рядка розбиваємо на підрядки.
Перший варіант:

mingw32-make -f makefile \
2>&1 \
>txt1.txt

У підрядку 1 stdout (канал 1) направлений на console, stderr (канал 2) направлений на console
У підрядку 2 stderr (канал 2) направляємо «туди, де stdout», але stdout зараз на console, тому stderr пішов туди (де й був).
У підрядку 3 stdout (канал 1) направляється у файл (stderr залишився на console)


Другий варіант:

mingw32-make -f makefile \
>txt1.txt \
2>&1

У підрядку 1 stdout (канал 1) направлений на console, stderr (канал 2) направлений на console
У підрядку 2 stdout (канал 1) направляється у файл
У підрядку 3 stderr (канал 2) направляємо «туди, де stdout», у файл

Подякували: leofun01, Yola2