Майка для Windows

Вопрос или проблема

Предоставляет ли 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, так и через установку сторонних утилит.

Оцените материал
Добавить комментарий

Капча загружается...