我想定义一个别名,它每 x 秒执行一次命令,直到底层进程给出指定的输出。然后,该命令应该停止运行。
这可能吗?如果可以,怎么做?非常感谢您的帮助。
我几乎满意
alias test1='while true; do <command>; sleep 1; done'
除了我必须手动停止它,因此一旦完成就不能让它执行新命令。
问题的原因: Dropbox 在工作中同步不佳。有时,我必须重新启动它。我想使用一个命令来做到这一点,该命令还告诉同步何时完成,例如通过
alias drop='dropbox stop && dropbox start && while true; do dropbox status; sleep 1; done'
我希望 Dropbox 输出“最新”时停止重复。
为 while 循环设置条件
如果你更换
经过:
它按照您的描述工作。
命令
同步完成后停止/启动
Dropbox
和完成变为:或更好(以防止加倍
dropbox status
):解释
while true
正在等待循环内的中断条件(永远不会出现),但如果返回则while [ "$(dropbox status)" != "Up to date"
使循环中断dropbox status
Up to date
正如 Jacob 所说,在循环中使用条件。我建议一个
until
循环:until
运行直到命令返回 true,即dropbox status
输出包含Up to date
.将其定义为您的函数
$HOME/.bashrc
现在,我没有
dropbox
cmd 应用程序,因此根据它输出状态的方式,您可能会也可能不会使用AWK
or处理它grep
。但重点是您可以将输出存储到值或将输出重定向到另一个命令,并评估它们。一旦我们得到特定的输出字符串 - break