Используя подстановку процесса bash, я хочу одновременно запускать две разные команды в файле. В этом примере это не обязательно, но представьте, что «cat/usr/share/dict/words» была очень дорогой операцией, такой как распаковка файла размером 50 гб.Неправильный результат с заменой bash и хвостом?
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 содержать все слова, которые начинаются с «а», в то время как z.txt содержит все слова, начинающиеся с «z», что и произошло.
Так почему же это не работает с «хвостом» и с какими другими командами это не работает?
Я думаю, что это связано с http://stackoverflow.com/questions/4489139/bash-process-substitution-and-syncing, который предполагает, что процессы с в выводе подстановки заканчиваются, как только внешняя команда заканчивается, но, честно говоря, я не могу продемонстрировать, что это текущая проблема с любыми командами I «Пробовал до сих пор –