VirtualBox: Как записывать ярлыки в гостевой ОС?

Указанные вами сообщения выводятся не на стандартный вывод, а на стандартную ошибку. Итак, чтобы их захватить, вам нужно либо перенаправить стандартную ошибку вместо стандартного вывода:

sudo -u user bash -c "git clone https://github.com/foo.git ~/foo 2>> log"

, либо оба STDERR и STDOUT:

sudo -u user bash -c "git clone https://github.com/foo.git ~/foo >> log 2>&1"

С bash вы также можете использовать & >> для этого:

sudo -u user bash -c "git clone https://github.com/foo.git ~/foo &>> log"

csh , tcsh , zsh эквивалент >> & ( (t) csh не поддерживает 2> & 1 , поэтому это единственный способ):

sudo -u user csh -c "git clone https://github.com/foo.git ~/foo >>& log"

В fish

sudo -u user fish -c "git clone https://github.com/foo.git ~/foo >> log ^&1"

Подробнее о различных типах операторов перенаправления см. Что такое операторы управления и перенаправления оболочки?

Теперь, в конкретном случае git , есть еще одна проблема. Как и несколько других программ, git может обнаружить, что его вывод перенаправляется, и в этом случае прекращает печать отчетов о ходе выполнения. Вероятно, это связано с тем, что отчеты предназначены для просмотра в реальном времени и включают \ r , что может быть проблемой при сохранении в файл.Чтобы обойти это, используйте:

       --progress
       Progress status is reported on the standard error stream by default
       when it is attached to a terminal, unless -q is specified. This
       flag forces progress status even if the standard error stream is
       not directed to a terminal.

И:

sudo -u user bash -c "git clone --progress https://github.com/foo.git ~/foo >> log 2>&1"

Если вы хотите, чтобы результат был как , так и , сохраненный в файл, используйте tee :

sudo -u user bash -c "git clone --progress https://github.com/foo.git ~/foo 2>&1 | 
    tee -a log

4
18.06.2017, 20:23
0 ответов

Теги

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