我有一个部署脚本,它会在继续之前删除 tmp 文件夹中的所有文件,但有时在部署过程中,某个进程会使用其中一个 tmp 文件,从而导致命令rm
失败。我的脚本如下所示
rm -rf app/tmp
tar -xf app.tar
这太过简单了,请不要试图建议改进部署过程,这完全是一个关于命令的rm
问题
我正在考虑类似的事情
# pseudo code
while [[ ! rm -rf app/tmp ]]; do sleep 1; done
tar -xf app.tar
换句话说:继续尝试删除文件夹,直到没有人在那里添加文件,然后继续脚本。
您知道在 bash 中允许这样做的语法吗?
目前脚本失败并且从未提取 tar 文件。
感谢您的输入。
答案1
循环while
不比较任何东西。它需要匹配某些东西;在本例中,我们想知道目录是否存在。如果存在,则使用 删除它rm
,否则如果不存在,则退出循环并运行tar
命令。您不想在条件rm
内使用该命令while
。
# pseudo code
while [[ -d app/tmp ]]; do rm -rf app/tmp; sleep 1; done
tar -xf app.tar
答案2
看起来我在另一个问题“如何在 bash 中运行命令直到成功”中找到了答案
https://stackoverflow.com/a/5274386/2296642
我应该使用until
语法。
until rm -rf app/tmp; do echo trying again; done
tar -xf app.tar