As mensagens mencionadas não são impressas na saída padrão, mas no erro padrão. Portanto, para capturá-los, você precisa redirecionar o erro padrão em vez da saída padrão:
sudo -u user bash -c "git clone https://github.com/foo.git ~/foo 2>> log"
Ou tanto STDERR quanto STDOUT:
sudo -u user bash -c "git clone https://github.com/foo.git ~/foo >> log 2>&1"
Com bash
, você também pode usar &>>
para isso:
sudo -u user bash -c "git clone https://github.com/foo.git ~/foo &>> log"
O csh
, tcsh
, zsh
equivalente é >>&
( (t)csh
não suporta 2>&1
, por isso é o único caminho):
sudo -u user csh -c "git clone https://github.com/foo.git ~/foo >>& log"
Em fish
sudo -u user fish -c "git clone https://github.com/foo.git ~/foo >> log ^&1"
Para saber mais sobre os diferentes tipos de operadores de redirecionamento, consulte Quais são os operadores de controle e redirecionamento do shell?
Agora, no caso específico de git
, há outro problema. Como alguns outros programas, git
pode detectar que sua saída está sendo redirecionada e interrompe a impressão de relatórios de progresso em caso afirmativo. Provavelmente, isso ocorre porque os relatórios devem ser vistos ao vivo e incluem \r
, que pode ser um problema quando salvo em um arquivo. Para contornar isso, use:
--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.
E:
sudo -u user bash -c "git clone --progress https://github.com/foo.git ~/foo >> log 2>&1"
Se você quer ver a saída como ela vem e salvar em um arquivo, use tee
:
sudo -u user bash -c "git clone --progress https://github.com/foo.git ~/foo 2>&1 |
tee -a log