Ras*_*mus 12 command-line bash dropbox
我想定义一个别名,每 x 秒执行一个命令,直到底层进程给出指定的输出。然后,该命令应该停止运行。
这是可能的,如果是,如何?非常感谢帮助。
我几乎满意
alias test1='while true; do <command>; sleep 1; done'
Run Code Online (Sandbox Code Playgroud)
除了我必须手动停止它,因此一旦完成就不能让它执行新命令。
问题的原因: Dropbox 在工作中同步很差。有时,我必须重新启动它。我想使用一个命令来做到这一点,该命令也告诉同步何时完成,例如
alias drop='dropbox stop && dropbox start && while true; do dropbox status; sleep 1; done'
Run Code Online (Sandbox Code Playgroud)
我希望在 Dropbox 输出“最新”时停止重复。
Jac*_*ijm 14
如果你更换
while true
Run Code Online (Sandbox Code Playgroud)
经过:
while [ "$(dropbox status)" != "Up to date" ]
Run Code Online (Sandbox Code Playgroud)
它像你描述的那样工作。
Dropbox同步完成后停止/启动和完成变为:
dropbox stop && dropbox start && while [ "$(dropbox status)" != "Up to date" ]; do dropbox status; sleep 1; done
Run Code Online (Sandbox Code Playgroud)
或者更好(以防止加倍dropbox status):
dropbox stop && dropbox start && while [ "$(dropbox status)" != "Up to date" ]; do echo "Updating"; sleep 1 ; done && echo "Finished"
Run Code Online (Sandbox Code Playgroud)
解释
while true正在等待循环内的中断条件(永远不会出现),但如果返回则while [ "$(dropbox status)" != "Up to date"使循环中断 dropbox statusUp to date
正如雅各布所说,在循环中使用条件。我建议一个until循环:
dropbox stop && dropbox start &&
until dropbox status | grep -q "Up to date";
do
sleep 1;
done
Run Code Online (Sandbox Code Playgroud)
until运行直到命令返回 true,即dropbox status输出包含Up to date.