使用“fuser”,我可以看到哪个进程正在使用该文件。但是,使用“fuser”不会显示任何包含的文件。
主文件
#! /bin/bash
source subfile
SomethingInSubFile
sleep 60
exit 0
子文件
SomethingInSubFile(){
echo "Just some text."
}
当我启动“mainfile”时,“fuser”输出以下结果:
root@thisbox:/tmp# fuser mainfile
/tmp/mainfile: 25560
root@thisbox:/tmp# fuser subfile
<nothing>
提问的原因:我有许多带有“源子文件”行的 bash 脚本。这些脚本在多个系统上使用。我构建了一个自动安装程序脚本,它使用“fuser”来查看是否有人正在使用某个文件。然后,脚本会等待文件发布,然后再将其替换为最新版本。不幸的是,我无法检查“子文件”是否正在使用中。
答案1
在该源函数退出后,子文件将不再使用。脚本在脚本生成的子 shell 中运行,并且获取任何具有函数定义的文件的行为就像这些函数是通过键盘输入到子 shell 中一样。在源文件函数执行期间,子 shell 将非常短暂地使用它。
您可能需要将睡眠功能添加到源文件中以供自己测试