Как остановить первую команду, если не повлиять на вторую команду
Например, у меня есть много псевдонимов для Терминала, так что одной командой я могу выполнить много команд, поэтому у меня может быть команда для обновления. 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