Reutilizar a última linha de saída do comando shell

6

Estou compilando algo e dependendo do sucesso (a última linha de saída contém "success" = eu quero scp o binário para o alvo. Eu prefiro um oneliner canalizado. Existe uma maneira de fazer isso?

    
por tzippy 21.02.2014 / 15:26

4 respostas

8

Você não está dando nenhuma informação sobre o que e como você está compilando. No entanto, na maioria dos casos, o compilador retornará um sinal de saída bem-sucedido se compilado corretamente para que você possa usar os recursos do shell diretamente:

$ gcc -o foo.bin foo.c && echo YES || echo NO
YES
$ gcc -o foo.bin foo.txt && echo YES || echo NO
foo.txt: file not recognized: File truncated
collect2: error: ld returned 1 exit status
NO

Então, no seu caso, você provavelmente poderia simplesmente executar

$ complile_command && scp binary user@server:/remote/path     
    
por 21.02.2014 / 16:41
8

Tente isto:

your command | tail -n1 | grep -q 'success' && scp ...

Exemplo:

% cuonglm at ~
% printf "sad\nsadsa\nsuccess\n" |
  tail -n1                       |
  grep -q 'success' && echo 'this command run'
this command run
    
por 21.02.2014 / 15:35
3

Um caminho:

cmd | awk 'END{exit!/success/}' && scp ...
    
por 21.02.2014 / 16:08
2

Você poderia, de fato, usar uma linha única:

command | grep -q success && othercommand

Isso executaria othercommand se o comando gerasse algo contendo success .

    
por 21.02.2014 / 15:33

Tags