Используя bash замену процесса, я хочу одновременно запускать две разные команды в файле. В этом примере не обязательно, но представьте, что "cat/usr/share/dict/words" была очень дорогой операцией, такой как распаковка файла размером 50 гб.
cat /usr/share/dict/words | tee >(head -1 > h.txt) >(tail -1 > t.txt) > /dev/null
После этой команды я ожидал бы, что h.txt будет содержать первую строку файла слов "A" и t.txt, чтобы содержать последнюю строку файла "Zyzzogeton".
Однако то, что на самом деле происходит, это то, что h.txt содержит "A", но t.txt содержит "argillaceo", который составляет около 5% в файле.
Почему это происходит? Кажется, что либо "хвостовой" процесс заканчивается раньше, либо потоки смешиваются.
Запуск другой подобной команды вроде этого ведет себя как ожидалось:
cat /usr/share/dict/words | tee >(grep ^a > a.txt) >(grep ^z > z.txt) > /dev/null
После этой команды я ожидал, что a.txt будет содержать все слова, начинающиеся с "a", а z.txt содержит все слова, начинающиеся с "z", что и произошло.
Так почему же это не работает с "хвостом" и с какими другими командами это не работает?