Вопрос или проблема
Предоставляет ли Windows базовую возможность tee
для копирования стандартного ввода в произвольный набор файлов и затем обратно в стандартный вывод?
Я обычно загружаю универсальную программу tee
, но мне интересно, существует ли что-то подобное в PowerShell или чем-то подобном?
PowerShell действительно имеет такую возможность, команда называется Tee-Object. Вы также можете использовать псевдоним tee, если вы больше привыкаете к подходу, похожему на Unix:
PS C:\Documents and Settings\Administrator> help Tee-Object NAME Tee-Object SYNOPSIS Сохраняет вывод команды в файл или переменную и отображает его в консоли.
пример:
C:>get-process | tee -filepath C:\file.txt
это отправит вывод в C:\file.txt
, а также в консоль.
Я только что нашел способ использовать perl в качестве альтернативы, например:
CMD1 | perl -ne "print $_; print STDERR $_;" 2> OUTPUT.TEE
Существует нативный порт tee для Windows, например:
https://github.com/dEajL3kA/tee-win32/tree/master#tee-for-windows
Используйте нативный порт tee от gnuwin32: https://gnuwin32.sourceforge.net/packages/coreutils.htm
Для кроссплатформенной альтернативы я использую coreutils: https://github.com/uutils/coreutils (17k звезд на сентябрь 2024 года, 13k коммитов и обновляется ежедневно)
Вот пример:
# Установите буфер обмена на "Hello World" и также сохраните его как "hello_world.txt"
$ echo Hello World | coreutils tee "hello_world.txt" | clip
$ dir
2024.09.25 23:56 14 hello_world.txt
Ответ или решение
Да, в Windows существует возможность использования функции, аналогичной tee
, для копирования стандартного ввода в произвольный набор файлов и одновременного вывода этого ввода на стандартный вывод. В PowerShell есть встроенный командлет, который называется Tee-Object
. Также, если вы предпочитаете более привычный подход в стиле Unix, вы можете использовать псевдоним tee
.
Вот синтаксис команды Tee-Object
:
Get-Help Tee-Object
Этот командлет позволяет сохранять вывод команд в файл или переменную и одновременно отображать его в консоли. Вот простой пример использования:
Get-Process | Tee-Object -FilePath C:\file.txt
В данном случае, вывод команды Get-Process
будет одновременно записан в файл C:\file.txt
и выведен в консоль.
Кроме того, существует альтернатива с использованием Perl:
CMD1 | perl -ne "print $_; print STDERR $_;" 2> OUTPUT.TEE
Также доступны нативные порты программы tee
для Windows. Например, вы можете ознакомиться с одним из проектов по следующей ссылке: tee-win32.
Еще один вариант — использование tee
из набора утилит GnuWin32, доступного по ссылке: GnuWin32 CoreUtils.
Для кросс-платформенных решений можно рассмотреть проект coreutils
, который доступен здесь: uutils/coreutils. В этом проекте, например, есть возможность записать текст в файл и в буфер обмена одновременно:
# Установите буфер обмена в "Hello World" и сохраните в "hello_world.txt"
echo Hello World | coreutils tee "hello_world.txt" | clip
Таким образом, Windows предоставляет несколько способов использование функциональности tee
, как через PowerShell, так и через установку сторонних утилит.