Отступ вывод Bash Script

Эта проблема связана с тем, что примитивные типы в Java не унифицированы для подстановки для Object и с стиранием общего типа.

Используя Function<T, Integer> вместо IntFunction<T>, когда последний имеет два недостатка:

  • Каждый возвращенный int помечен в бокс, что означает больший объем памяти;
  • Каждый возвращаемый Integer получает автоматическую проверку времени выполнения (которая можно оптимизировать, но да ...);

Обратите внимание, что эти проблемы с базой данных на Java заставляют людей писать целую библиотеку под названием Trove, которая избегает общие интерфейсы в пользу специализированных типов коллекций для каждого примитивного типа.

13
задан CB Bailey 4 November 2009 в 10:59
поделиться

5 ответов

Проблема с конвейером вывода git через любую команду заключается в том, что git обнаружит, что вывод не является терминалом, поэтому он не будет выводить сообщения, которые являются сообщениями о ходе выполнения, потому что (обычно) это бесполезно передавать по конвейеру большое количество символов терминала и обновлять ход выполнения чего-либо, кроме терминала.

Чтобы в любом случае получать сообщения о ходе выполнения, вам необходимо предоставить параметр - подробный для git clone . Сообщения о ходе выполнения появляются на stderr , поэтому вам, вероятно, понадобится канал вроде 2> & 1 | ... .

Имейте в виду, что сообщения о ходе выполнения не будут отображаться построчно, но вы получите множество управляющих кодов терминала, которые предназначены для очистки одной и той же строки. Попытка сдвинуть этот вывод с помощью конвейера через линейный инструмент, такой как sed, может оказаться трудной, если не невозможной. Для программы, которая может обрабатывать ввод без буферизации, должно быть достаточно возможно найти ^ M в выводе и добавить несколько пробелов (или табуляцию) сразу в корму, сбрасывая так часто, как каждый пакет данных получено.

5
ответ дан 1 December 2019 в 06:00
поделиться

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.)

42
ответ дан 1 December 2019 в 06:00
поделиться

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.

5
ответ дан 1 December 2019 в 06:00
поделиться

A different solution that doesn't require sed:

command | (while read; do echo "    $REPLY"; done)
5
ответ дан 1 December 2019 в 06:00
поделиться

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
2
ответ дан 1 December 2019 в 06:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: