PDA

Показать полную графическую версию : [решено] Проблемы с конвейером


Georges
16-02-2019, 13:06
Создаем простой bat файл
dir >a.txt

Запускаем.
На экране расшифрованная команда dir 1>a.txt

Откуда взялась эта 1?
Проблема повторяется на разных машинах, Win 8 и Win 10

Dir >a.txt>b.txt
превращается в dir 1>b.txt

Поясните, откуда эта 1 и как с ней бороться.

mwz
16-02-2019, 13:56
Georges, а если пробел после dir убрать, как это должно быть?

megaloman
16-02-2019, 14:55
Georges, 1 это стандартный выходной поток STDOUT. По умолчанию вывод на консоль.
2 поток STDERR для вывода ошибок.
Вы перенаправляете вывод стандартного потока с консоли на файл.
Бороться с этим не имеет смысла и невозможно.а если пробел после dir убрать, как это должно быть? »Не совсем понял, но пробел не при чем.Проблемы с конвейером »Да и не конвейер это, а перенаправление вывода.
Я не понимаю, как работает конструкция Dir >a.txt>b.txt. Задумано как одновременный вывод команды в 2 файла? Невозможно, ИМХО.

Iska
16-02-2019, 15:21
Запускаем.
На экране расшифрованная команда dir 1>a.txt
Откуда взялась эта 1?
Проблема повторяется на разных машинах, Win 8 и Win 10

Поясните, откуда эта 1 и как с ней бороться.»
Это не проблема. Так и должно быть. «1» — номер одного из стандартных потоков, в данном случае — стандартного потока вывода, stdout. «Бороться» с ней не надо никак.

Update: Припоздал.

Georges
16-02-2019, 17:20
Это не проблема. Так и должно быть. «1» — номер одного из стандартных потоков, в данном случае — стандартного потока вывода, stdout. «Бороться» с ней не надо никак. »

То есть она на команду не влияет, а просто отображается?

Я не понимаю, как работает конструкция Dir >a.txt>b.txt. Задумано как одновременный вывод команды в 2 файла? Невозможно, ИМХО. »
Это условные примеры, тестировалось, когда возникает и когда не возникает эта единица. Одним из примеров был не менее абсурдный type >a.txt Рабочая гипотеза была в том, что cmd зачем-то заменяет > на 1>. Пример с Dir >a.txt>b.txt был направлен на то, чтобы выяснить, первая или вторая угловая скобка дополняется единицей. Тем не менее, результат тоже озадачил :) Сразу вспомнились Стругацкие с семиногим буридановым бараном без мозжечка.

alpap
16-02-2019, 18:29
одновременный вывод команды в 2 файла? »
даже двух разных

@echo off
>"1.txt" (>"2.txt" dir a|dir b)
pause

Iska
16-02-2019, 19:03
То есть она на команду не влияет, а просто отображается? »
Она там подразумевается. То есть, если Вы не указали, опустили единицу при написании кода (а так все, как правило и делают), то она там неявно всё равно присутствует, что и отображается эхом при исполнении команды.

даже двух разных »
alpap, имелась в виду невозможность одновременного перенаправления вывода одной команды в два файла зараз (без использования сторонних средств, наподобие tee.exe и т.п.).

alpap
17-02-2019, 03:46
одновременного перенаправления »
я так понял что имеется ввиду ИМЕННО конкретно одной написанной команды, потому как ее можно написать три раза и расхождения по времени при выводе одной и той же команды в три разных файла я не вижу

>"3.txt" (>"2.txt" (>"1.txt" (dir& echo %time%)|(dir& echo %time%))|(dir& echo %time%))

Iska
17-02-2019, 11:09
alpap, так-то да. Но если это какая-нибудь получасовая обработка видео?! Мы же не будем её гонять из-за этого три раза, да и не всегда возможно сие будет — если исходные данные одновременно являются и результирующими.

alpap
17-02-2019, 20:48
Iska, так понятнее.




© OSzone.net 2001-2012