While 循环直到文件存在于 bash 中

Sur*_*ani 0 bash shell-script

我想写入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
Run Code Online (Sandbox Code Playgroud)

它似乎有一个语法错误。

Uta*_*ead 8

尽管 : ; 做
    [[ -f "/path/to/file" ]] && 中断
    echo "暂停直到文件存在。"
    睡觉 1
完毕

不使用类似的东西inotify,这就是您将能够做的事情的极限。

while上面的循环只是:用作它的条件,这几乎意味着“做它直到我们杀死它”。

重要的一行是[[测试。这里的测试条件不使用该if语句。这是因为[[是实际命令而不是if语句的一部分。这将执行[[ -f "/path/to/file" ]]&&检查[[命令的退出状态,如果退出状态为0(成功),则执行以下语句。此处的以下语句break将关闭脚本所在的当前循环。

注意:bash强烈建议您使用[[代替[。它具有 的所有功能,[但更强大且易于使用。


Яро*_*лин 5

文件参数和右括号之间的空格很重要。

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
Run Code Online (Sandbox Code Playgroud)