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