如果文件存在,如何在脚本中继续?
#!/bin/bash
echo "Start"
# waiting to be exist file
echo "file already exists, continuing"
答案 0 :(得分:4)
如果是while
,请执行sleep X
,以便每隔X秒检查一次该文件是否存在。
当文件存在时,while
将完成,您将继续使用echo "file already exists, continuining"
。
#!/bin/bash
echo "Start"
### waiting to be exist file
while [ ! -f "/your/file" ]; # true if /your/file does not exist
do
sleep 1
done
echo "file already exists, continuing"
而不是检查文件是否存在检查脚本 已经完成了背景?
根据您发布的代码,我做了一些更改以使其完全有效:
#!/bin/bash
(
sleep 5
) &
PID=$!
echo "the pid is $PID"
while [ ! -z "$(ps -ef | awk -v p=$PID '$2==p')" ]
do
echo "still running"
sleep 1
done
echo "done"
答案 1 :(得分:1)
有特定于操作系统的方法可以对文件系统执行阻塞等待。 Linux使用inotify
(我忘了BSD等价物)。安装inotify-tools后,您可以编写类似于
#!/bin/bash
echo "Start"
inotifywait -e create $FILE & wait_pid=$!
if [[ -f $FILE ]]; then
kill $wait_pid
else
wait $wait_pid
fi
echo "file exists, continuing"
inotifywait
的呼叫在收到操作系统已创建$FILE
的通知后才会退出。
不简单地调用inotifywait
并让它阻止的原因是存在竞争条件:当您测试它时该文件可能不存在,但可以在您开始观察创建之前创建它事件。为了解决这个问题,我们启动了一个等待创建文件的后台进程,然后检查它是否存在。如果是,我们可以杀死inotifywait
并继续。如果没有,inotifywait
已经在关注它,所以我们保证会看到它被创建,所以我们只需要wait
来完成该过程。
答案 2 :(得分:0)
对于fedorqui:这样好吗?有问题吗?
#!/bin/bash
(
..
my code
..
) &
PID=$BASHPID or PID=$$
while [ ! ps -ef | grep $PID ]
do
sleep 0
done
谢谢