Как остановить первую команду, если не повлиять на вторую команду

Например, у меня есть много псевдонимов для Терминала, так что одной командой я могу выполнить много команд, поэтому у меня может быть команда для обновления. rkhunter что также делает freshclam, который в основном это:

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

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

И поскольку в данный момент это является для меня серьезной проблемой, особенно если я хочу автоматизировать задачи с помощью псевдонимов и т. Д., Не создавая сценарий и т. Д., Есть ли способ сделать это так, что если одна из команд не выполнится для следующей команды после && все еще бежать?

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

Так есть ли способ исправить это, и почему это все равно не удается?

2 ответа

Решение

С помощью:

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

или, если вам нужны логические операции

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

Сделайте несколько простых тестов с 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
    

объяснение

; между командами не более чем разделитель между двумя или более командами, без учета ошибки.

Это так же, как список команд в скрипте

command1
command2
command3

ОТОХ, && ( логическое соединение) и || ( логическая дизъюнкция) - это логические операции.

  • && Если одно условие не выполняется, нет смысла проверять второе или третье условие. Результат будет таким же: уже провал.

     A  B   A ∧ B
     ------------
     T  T   T
     T  F   F
     F  T   F
     F  F   F
    
  • || Если и только если одно условие не выполняется, имеет смысл проверить второе и третье условие. Если первая команда выполнена успешно, вторая команда не будет выполнена, поскольку результат считается уже успешным.

     A  B   A ∨ B
     ------------
     T  T   T
     T  F   T
     F  T   T
     F  F   F
    

Я собираюсь добавить сюда свои два цента.

Если вы запустите из окна терминала следующие команды, они позволят вам настроить rkhunter а также freshclam когда их обновления будут запущены. Freshclam на самом деле есть демон, который может работать столько раз в день, сколько вы хотите. В процессе настройки freshclam он спрашивает, сколько раз в день проверять наличие обновлений. По умолчанию 24 что означает один раз в час. rkhunter с другой стороны, выполняется ежедневное сканирование, но обновляется еженедельно.

FreshClam настроить:

sudo dpkg-reconfigure clamav-freshclam

Rkhunter настроить:

sudo dpkg-reconfigure rkhunter
Другие вопросы по тегам