例如,我为终端创建了许多别名,以便使用一个命令可以执行许多命令,因此我可能有一个要更新的命令,rkhunter
它freshclam
基本上是这样的:
sudo rkhunter --update && sudo rkhunter --versioncheck && sudo freshclam
我甚至可能希望自动执行此任务,使其每小时左右运行一次,但这样做存在一个问题,因为如果这些命令中的任何一个失败,则其后的命令(如果有)将不会被执行。而且由于这也可能是一项自动化任务,我甚至不知道在某个地方出现了问题,这意味着该点之后的所有内容都不会运行。
而这对我来说目前是一个大问题,特别是如果我想通过别名等自动执行任务而不创建脚本等,有没有什么办法可以让其中一个命令失败,而下一个命令仍然可以&&
运行?
此外,另一件事是,这种情况并不总是发生,事实上有时它会失败并且仍然运行下一个命令,但大多数时候它不会,所以实际上甚至没有任何方法可以预测它是否会失败,我甚至不太确定它为什么会失败。
那么有没有办法解决这个问题,为什么会失败呢?
答案1
使用:
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
答案2
我要在这里提出我的看法。
如果您从终端窗口运行以下命令,它们允许您配置和rkhunter
何时freshclam
运行它们的更新。 Freshclam
实际上有一个守护进程,可以根据您的需要每天运行多次。在配置过程中,freshclam
它会询问每天检查更新多少次。它默认为24
每小时一次。 rkhunter
另一方面,它每天运行扫描,但每周更新一次。
freshclam 配置:
sudo dpkg-reconfigure clamav-freshclam
rkhunter 配置:
sudo dpkg-reconfigure rkhunter