Я запускаю сервер из командного файла и хочу, чтобы выходные данные сервера отображались как на экране, так и записывались в файл журнала. Я нашел способ сделать это из этого ответа:
powershell "startmyserver | tee server.log"
Проблема заключается в том, что канал вызывает выполнение первой команды и ее полное выполнение до выполнения второй команды. Это означает, что я не могу контролировать стандартный вывод моего сервера, пока он действительно работает, что я и пытаюсь сделать (я не хочу выключать сервер, чтобы просто проверить самые последние сообщения журнала).
Для более простого примера я попытался сделать pause
. Ну, pause
в Powershell не существует, поэтому мне пришлось запустить ее во вложенной оболочке cmd
:
powershell "cmd /c pause | tee test.txt"
Неудивительно, что после выполнения этой команды я просто получаю мигающий курсор. Через некоторое время я нажимаю клавишу, а затем появляется "Нажмите любую клавишу для продолжения" и записывается в файл почти одновременно.
То, что я хочу сделать, это канал для потоковой передачи stdout строка за строкой для следующей команды. Другими словами, всякий раз, когда он сталкивается с символом EOL, он должен посылать некоторый вывод, и это должно (в моем случае tee
) вызывать появление текста на экране и одновременную запись в файл. (На самом деле, я даже не беспокоюсь о том, записывается ли текст в файл построчно, он может быть записан полностью в конце, хотя это не было бы идеально. Я просто хочу видеть строки на экране в том виде, в котором они написаны.)
Возможно ли это в командной строке и / или в Powershell?