Как перенаправить вывод дочернего процесса?

Попробуйте следующее:

#!/usr/bin/awk -f

BEGIN {
  FS = OFS = ";";
}

{
  if($2 > a[$1]) { a[$1] = $2 }
  else { a[$1] = $2 }
}

END {
  for(x in a) { print x, a[x] }
}
2
27.04.2016, 11:22
2 ответа

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

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
9
27.01.2020, 21:49
git clone https://github.com/scrooloose/nerdtree.git
/home/test_user/.vim/bundle/nerdtree &>> /var/log/build_scripts.log
1
27.01.2020, 21:49

Теги

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