我正在运行Tcpdump每60秒生成一个新文件。同时我正在运行一个bash脚本来处理由Tcpdump生成的文件,但在执行之前我应检查文件写入完成情况。 我正在使用“fuser”但我发现它总是返回1(旧文件和新文件仍由tcpdump写入)。任何人都可以告诉我如何解决它
#!/bin/bash
FULLPATH=$1
echo $FULLPATH
for file in $FULLPATH/*.pcap
do
echo "file name: $file"
fuser $file
result=$?
echo $result
if [ $result = 0 ]; then
echo "There are no processes accessing file: $file"
sudo /usr/src/nDPI/example/ndpiReader -i $file
echo "end: $file"
#rm-f $file
else
echo "file $file is in use."
fi
done
答案 0 :(得分:1)
咨询fuser
手册显示
如果没有访问任何指定文件或发生致命错误,fuser返回非零返回码
因此获得非零代码可能不错,但您可能也想检查输出,以区分致命错误与正在使用的文件:
ouput=$(fuser $file)
return_code=$?
if [ "$return_code" -ne 0 ]; then
if [ -n "$output"]; then
echo "The file is being used"
else
echo "A fatal error occured !"
fi
else
echo "The file is not being used"
fi
如果您不关心致命错误(毕竟,如果发生了错误,您可能不应该尝试读取文件),那么检查返回代码是否为零应该就足够了。
总结并改写一下,fuser
将: