![在 bash 中循环直到文件存在](https://linux22.com/image/1334417/%E5%9C%A8%20bash%20%E4%B8%AD%E5%BE%AA%E7%8E%AF%E7%9B%B4%E5%88%B0%E6%96%87%E4%BB%B6%E5%AD%98%E5%9C%A8.png)
我想wait
在 bash 中写入直到文件存在。我该怎么做?
我尝试了这个但是没有用:
while [ ! -f outputs\/$trace\_hist_len_$hist_len\_page_size_$page_size\.out]; do
echo "waiting for outputs\/$trace\_hist_len_$hist_len\_page_size_$page_size\.out";
done
好像有一个语法错误。
答案1
当:;做 [[ -f "/path/to/file" ]] && 中断 echo“暂停直到文件存在。” 睡眠 1 完毕
如果不使用类似的东西inotify
,这大概就是你能做的事情的极限了。
上面的循环while
只是用作:
条件,这几乎意味着“一直这样做直到我们杀死它”。
重要的一行是[[
测试。这里的测试条件不使用if
语句。这是因为[[
是实际命令,不是语句的一部分if
。这将执行[[ -f "/path/to/file" ]]
并&&
检查命令的退出状态[[
,如果退出状态为(成功),则执行以下语句0
。以下语句break
将关闭脚本所在的当前循环。
注意:bash
强烈建议您使用[[
而不是[
。 它具有 的所有功能,[
但功能更强大且更易于使用。
答案2
文件参数和右括号之间的空格很重要。
if [ -f "path" ]; then echo good;fi
if [-f "path"] ; then echo bad;fi
if [ -f "path"]; then echo bad;fi
if [-f "path" ]; then echo bad;fi