Эта проблема связана с тем, что примитивные типы в Java не унифицированы для подстановки для Object
и с стиранием общего типа.
Используя Function<T, Integer>
вместо IntFunction<T>
, когда последний имеет два недостатка:
int
помечен в бокс, что означает больший объем памяти; Integer
получает автоматическую проверку времени выполнения (которая можно оптимизировать, но да ...); Обратите внимание, что эти проблемы с базой данных на Java заставляют людей писать целую библиотеку под названием Trove, которая избегает общие интерфейсы в пользу специализированных типов коллекций для каждого примитивного типа.
Проблема с конвейером вывода git через любую команду заключается в том, что git обнаружит, что вывод не является терминалом, поэтому он не будет выводить сообщения, которые являются сообщениями о ходе выполнения, потому что (обычно) это бесполезно передавать по конвейеру большое количество символов терминала и обновлять ход выполнения чего-либо, кроме терминала.
Чтобы в любом случае получать сообщения о ходе выполнения, вам необходимо предоставить параметр - подробный
для git clone
. Сообщения о ходе выполнения появляются на stderr
, поэтому вам, вероятно, понадобится канал вроде 2> & 1 | ...
.
Имейте в виду, что сообщения о ходе выполнения не будут отображаться построчно, но вы получите множество управляющих кодов терминала, которые предназначены для очистки одной и той же строки. Попытка сдвинуть этот вывод с помощью конвейера через линейный инструмент, такой как sed, может оказаться трудной, если не невозможной. Для программы, которая может обрабатывать ввод без буферизации, должно быть достаточно возможно найти ^ M
в выводе и добавить несколько пробелов (или табуляцию) сразу в корму, сбрасывая так часто, как каждый пакет данных получено.
Pipe through
sed "s/^/ /g"
This will replace the (zero-width) anchor for line start by four spaces, effectively adding four spaces at the start of the line.
(The g does this globally; without it, it will only do it once, which would do the first line.)
You can filter the output from the command you want to indent through sed.
/tmp/test>cat script
#!/bin/sh
echo "Running ls -l"
ls -l 2>&1 | sed 's/^/\t/'
/tmp/test>sh script
Running ls -l
total 4
-rw-rw-r-- 1 hlovdal hlovdal 55 2009-11-03 23:36 script
/tmp/test>
The sed command will replace the beginning of the line (before the first character) with a tabulator, i.e. insert a tabulator at the very beginning of the line.
Updated to also indent stderr.
A different solution that doesn't require sed:
command | (while read; do echo " $REPLY"; done)
Since the awk solution wasn't posted yet:
$ echo -en "hello\nworld\n"
hello
world
$ echo -en "hello\nworld\n" | awk '{print " "$0}'
hello
world