Comments 21
Когда в начале 80-х г.г. прошлого столетия я обратил свой взор в сторону Unix, то меня в нем подкупило именно наличие конвейеров. Надо мной все смеялись, какой Unix, светлое будущее связано с IBM и его OS/370, а также с его советскими аналагоми ЕС ЭВМ, СВМ и клнечно язык PL/1. Но надо сказать, что Unix в Советском Союзе был! И когда в 1986 году в рамках программы АнтиСОИ мы начали создавать стенд имитационного моделирования, то я приложил громадные усилия чтобы он создавался на Unix. Мне это удалось, но Советский Союз заканчивал свое существование.
Всё в пайпах хорошо, кроме того, что нельзя сделать вывод из трубы в две разные программы/файла.
И приходится писать в файл, а из файла уже tail -f в разные места и придумывать, как остановить обработку, когда данные закончатся.
$ seq 10|tee >(echo «got $(wc -l) lines»)|grep 1
1
10
got 10 lines
$
$ seq 10|tee >(echo «got $(wc -l) lines» >/dev/tty)|grep 2
2
got 10 lines
$
4
14
24
34
40
41
42
43
44
45
46
47
48
49
got 50 lines
tens: 10 20 30 40 50
Можно, с помощью tee
:
echo "Hello, World!" | tee file1.txt | tee file2.txt
Проверяем:
cat file1.txt
Hello, World!
cat file2.txt
Hello, World!
В оба файла записан один вывод из echo
. В tee
можно еще указать ключ -a
который будет аппендить, а не переазаписывать файлы.
Как реализованы конвейеры в Unix