Como parar o primeiro comando a falha em afetar o segundo comando

1

Por exemplo, eu tenho muitos aliases para o Terminal criado para que com um comando eu possa executar muitos comandos, então eu posso ter um comando para atualizar rkhunter , que também faz freshclam , que é basicamente isto:

sudo rkhunter --update && sudo rkhunter --versioncheck && sudo freshclam

E eu posso até querer automatizar essa tarefa para que ela seja executada a cada hora, mas com isso há um problema, pois se qualquer um desses comandos falhar, o comando depois dele (se houver um) falhará. não ser executado. E como isso também pode ser uma tarefa automatizada, eu nem mesmo saberei que em algum lugar abaixo da linha algo está falhando, o que significa que tudo além desse ponto não será nem executado.

E como este é um grande problema para mim no momento, especialmente se eu quiser automatizar tarefas através de aliases e coisas assim sem criar um script, etc., existe alguma maneira de fazê-lo se um dos comandos falhar para o próximo comando após o && ainda ser executado?

Além disso, outra coisa é que isso não acontece o tempo todo, na verdade, às vezes, ele falha e ainda executa o próximo comando, mas na maioria das vezes isso não acontece, então há realmente qualquer maneira de prever se é vai falhar ou não, e eu nem tenho certeza do porque está falhando.

Então, há uma maneira de corrigir isso e por que está falhando de qualquer maneira?

    
por Fabby 19.07.2015 / 18:49

2 respostas

6

Usando:

sudo rkhunter --update; sudo rkhunter --versioncheck; sudo freshclam

ou, se você precisar de operações lógicas

sudo rkhunter --update || sudo freshclam
sudo rkhunter --update && sudo rkhunter --versioncheck; sudo freshclam

Faça alguns testes simples com echo

  • echo -n a; echo -n b; echo -n c

    abc
    
  • echo -n a && echo -n b; echo -n c

    abc
    
  • echo -n a || echo -n b; echo -n c

    ac
    

Explicação

O ; entre os comandos não é mais do que um separador entre dois ou mais comandos, sem considerar um erro.

É o mesmo que uma lista de comandos em um script

command1
command2
command3

OTOH , && ( conjunção lógica ) e || ( disjunção lógica ) são operações lógicas .

  • && Se uma condição falhar, não faz sentido verificar a segunda ou terceira condição. O resultado seria o mesmo: falha já.

     A  B   A ∧ B
     ------------
     T  T   T
     T  F   F
     F  T   F
     F  F   F
    
  • || Se, e somente se, uma condição falhar, faz sentido verificar a segunda e a terceira condição. Se o primeiro comando for bem-sucedido , o segundo não será executado, porque o resultado já é considerado um sucesso.

     A  B   A ∨ B
     ------------
     T  T   T
     T  F   T
     F  T   T
     F  F   F
    
por A.B. 19.07.2015 / 18:50
3

Vou jogar meus dois centavos aqui.

Se você executar a partir de uma janela de terminal os seguintes comandos, eles permitirão que você configure os rkhunter e freshclam para quando as atualizações forem executadas. Freshclam na verdade tem um daemon que pode ser executado quantas vezes quiser. Durante o processo de configuração de freshclam , ele pergunta quantas vezes por dia para verificar se há atualizações. O padrão é 24 , o que significa uma vez por hora. Por outro lado, rkhunter executa uma verificação diária, mas atualiza semanalmente.

freshclam configure:

sudo dpkg-reconfigure clamav-freshclam

rkhunter configure:

sudo dpkg-reconfigure rkhunter
    
por Terrance 19.07.2015 / 19:06