2009-02-26 3 views
1

Команда unix tee разделяет стандартный ввод на stdout и файл.`tee` эквивалент команды для * ввода *?

Что мне нужно, это то, что работает наоборот, слияние нескольких входов на один выход - мне нужно объединить две команды (или более).
Не уверен, что такое семантика этого приложения - предположим, что каждый аргумент является полной командой.

Пример:

> eet "echo 1" "echo 2" > file.txt 

должен создать файл, который имеет содержание

1 
2 

Я попытался

> echo 1 && echo 2 > zz.txt 

Это не работает.

Замечание: I know Я мог бы просто добавить выходные данные каждой команды в файл, но я хочу сделать это за один раз (на самом деле, я хочу, чтобы слияние выведенных выходов в другую программу).
Кроме того, я мог ролл мой собственный, но я ленивый, когда я могу себе это позволить :-)

Ах да, и было бы неплохо, если бы он работал в ОС Windows (хотя я предполагаю, что любой Баш/Linux -flavored решение работает, с помощью UnxUtils/MSYS/и т.д.)

ответ

7

Попытка

(echo 1; echo 2) > file.txt 

, которые порождают подоболочку и выполняет команды там

{ echo 1; echo 2; } > file.txt 

возможен, тоже. Это не порождает Подоболочке (точка с запятой после последней команды важна)

+0

Какую оболочку вы используете? Я пробовал первый в windows 'cmd.exe, а содержимое файла -' 1; эхо 2 '; второй вариант не работает вообще. –

+0

Я получил его для работы в cmd.exe вот так: (echo 1 && echo 2)> file.txt –

+0

Я использую bash на linux. (echo 1 && echo 2) работает только в том случае, если echo 1 возвращает 0 (успех)! && означает что-то вроде AND, echo 2 запускается только в том случае, если echo 1 не сбой –

-1

echo 1 > zz.txt && echo 2 >> zz.txt

Это должно работать. Все, что вы действительно делаете, это запустить две команды друг за другом, где первая перенаправляется на файл, а затем, если это было успешно, вы запускаете еще одну команду, которая добавляет свой вывод в конец файла, который вы написали в первую очередь ,

+0

Вы читали боковую заметку в конце? –

1

Я предполагаю, что вы хотите, чтобы обе команды выполнялись параллельно, и соединяли оба выхода с другой командой.

Я хотел бы сделать:

(echo 1 & echo 2) | cat 

Где «Эхо 1» и «эхо 2» являются команды, генерирующие выходы и «кошки» является команда, которая получит объединенный выход.