Bash 如果文件存在,如何在脚本中继续?
如果文件存在,如何在脚本中继续Bash 如果文件存在,如何在脚本中继续?,bash,Bash,如果文件存在,如何在脚本中继续 #!/bin/bash echo "Start" # waiting to be exist file echo "file already exists, continuing" 如果睡眠X,则在时执行,以便每隔X秒检查文件是否存在 当文件存在时,while将完成,您将继续使用echo“文件已存在,继续” 而不是检查文件是否存在检查脚本 你已经完成了背景吗 根据您发布的代码,我做了一些更改以使其完全工作: #!/bin/bash ( sleep 5 ) &a
#!/bin/bash
echo "Start"
# waiting to be exist file
echo "file already exists, continuing"
如果
睡眠X
,则在时执行,以便每隔X秒检查文件是否存在
当文件存在时,while
将完成,您将继续使用echo“文件已存在,继续”
而不是检查文件是否存在检查脚本
你已经完成了背景吗
根据您发布的代码,我做了一些更改以使其完全工作:
#!/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"
对费多尔基说:这么好吗?有问题吗
#!/bin/bash
(
..
my code
..
) &
PID=$BASHPID or PID=$$
while [ ! ps -ef | grep $PID ]
do
sleep 0
done
谢谢有一些特定于操作系统的方法可以在文件系统上执行阻塞等待。Linux使用inotify
(我忘记了BSD等价物)。安装后,您可以编写类似的代码
#!/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
已经在监视它,因此我们保证看到它被创建,因此我们只需等待过程完成。非常感谢!可能会重复)而不是检查文件是否存在检查脚本是否已完成后台?嗯,您可以使用进程的PID,检查它是否仍然存在:ps-ef | grep PID
,等等@VeronikaLipská根据您的答案检查我的更新答案:)我在代码中解决了不同的小问题。请参阅我的更新答案。如果不存在,则此选项无效。文档说明:create:在监视的目录中创建了一个文件或目录。
我收到的错误消息:无法监视/tmp/。mrxvt-11843:没有这样的文件或目录
#!/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"