gpt4 book ai didi

bash - 如何在 shell 中等待文件创建并监听其内容直到超时

转载 作者:行者123 更新时间:2023-12-03 08:13:56 25 4
gpt4 key购买 nike

我正在尝试在docker中运行一个程序,一旦程序成功启动,它就会在docker的文件系统中创建一个FIFO文件,并在其中写入一个“成功”字符串。我知道,如果文件存在,我可以通过 tail -f 流式传输文件的内容,但这将始终等到我在 cli 上点击 ctrl-c 。另外,如果文件尚未创建,如何扩展这种情况?

我想知道是否有一个 shell 命令可以等待直到文件被写入非空字符串,并且在我开始等待时该文件可能不存在。一旦达到超时,等待就会退出。

请注意,此命令将通过 docker exec -i myContainer the_desired_command... 传递给 docker。

最佳答案

如果该文件不存在,则大多数尝试读取其内容的命令都会失败。

要克服这个问题,您可以使用带有 sleepuntil 循环:

#!/bin/bash

file=/file/to/check

until [ -s "$file" ]
do
sleep 1
done

# Now we can really start the operations
# ...

此代码将每 1 秒测试一次文件是否存在以及非空。当循环存在时,您将确保文件存在并且非空。


以下是添加超时的方法:

#!/bin/bash

file=/file/to/check
timeout=30 # seconds to wait for timeout
SECONDS=0 # initialize the bultin counter

until [ -s "$file" ] || (( SECONDS >= timeout ))
do
sleep 1
done

[ -s "$file" ] || exit 1 # timed-out

# start the operations
# ...

关于bash - 如何在 shell 中等待文件创建并监听其内容直到超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70059945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com