Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如果文件存在,如何在脚本中继续?_Bash - Fatal编程技术网

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"