Потому что парсинг и сериализация требуются на каждом отдельном шаге
JSON или EDN в качестве транспортного уровня был бы сильно приятнее... И типизированные — хотя бы структурно — пайпы!
Чтобы shell просил у элементов конвеера спеку, а ту могли сказать "хочу :name строкой и :age датой". Shell в итоге проверял бы совместимость патрубков в трубопроводе и ругался о несоответствии вместо запуска!
Но это и не чистый shell. Это уже REPL, в котором многие команды, это вызовы функций, а не внешних программ. А это уже не Unix way :) (не осуждаю)
Функция/плугин от программы принципиально не отличаются - это элемент, который должен решать единственную маленькую задачу и делать это хорошо. Вполне Unix way.
JSON или EDN в качестве транспортного уровня был бы сильно приятнее... И типизированные — хотя бы структурно — пайпы!
Чтобы shell просил у элементов конвеера спеку, а ту могли сказать "хочу :name строкой и :age датой". Shell в итоге проверял бы совместимость патрубков в трубопроводе и ругался о несоответствии вместо запуска!
Это было бы слишком хорошо, широкие массы к такому не готовы...
По поводу babashka подумалось, что это неплохой вариант не в роли замены shell scripts — тут я всё ещё считаю, что пайтон лучше подходит по причине батареек — а в роли замены для jq того же: у Clojure приятные средства для жонглирования данными и сам язык expression based, что делает его отличным участником конвееров для данных
Кстати, от того же автора есть отличная альтернатива jq – jet. Jet поддерживает json, edn и transit.