![如果尚未使用 .sh 脚本打开文件,则打开它](https://linux22.com/image/1157554/%E5%A6%82%E6%9E%9C%E5%B0%9A%E6%9C%AA%E4%BD%BF%E7%94%A8%20.sh%20%E8%84%9A%E6%9C%AC%E6%89%93%E5%BC%80%E6%96%87%E4%BB%B6%EF%BC%8C%E5%88%99%E6%89%93%E5%BC%80%E5%AE%83.png)
我得到了这个打开文件的脚本.html
,但我想将其更改为仅在文件尚未打开时才打开它。
有人知道为了实现这一点需要添加哪些行吗?
#!/bin/bash
fileFragment=$"*project/html/index.html"
fullPath=$(find ../ -path $fileFragment)
xdg-open $fullPath &
编辑
我想要一个通用的解决方案,这就是为什么我把问题保持得如此简单,它与浏览器无关,而是与我使用打开的任何文件有关xdg-open
,我已经通过提供此示例指定了它,我不想再为特定浏览器指定它了。
但如果没有简单的通用解决方案,那么我宁愿为我的具体情况提供一个答案,而不是没有答案:所以在我的情况下,我使用的是 Firefox。
答案1
以下解决方案仅适用于以下命令继续跑直到您关闭程序/选项卡。不幸的是,大多数 GUI 程序和 都不是这种情况
xdg-open
。对于 Firefox,可以获取当前打开的 URL 列表但这grep
既不是通用的也不是理想的解决方案。至于测试程序是否正在运行,请参阅这个问题。
您可以lockfile
使用procmail
包裹。 作为其
man
页面有一个与您的用例完全匹配的示例,我仅引用它:
假设您想确保对文件“important”的访问是序列化的,即,不应允许多个程序或 shell 脚本访问它。为简单起见,我们假设它是一个 shell 脚本。在这种情况下,您可以像这样解决它:
... lockfile important.lock ... access_"important"_to_your_hearts_content ... rm -f important.lock ...
lockfile
现在,如果所有访问“重要”的脚本都遵循此准则,您将确保最多只有一个脚本在和命令之间执行rm
。
默认情况下,其他每个脚本都会等待文件再次解锁,默认每八秒测试一次(例如更改lockfile -5 important.lock
为五秒)。如果你只是想检查它是否被锁定,你可以使用经典test
命令:
if [ -e important.lock ]; then
# stuff to do if locked
else
# stuff to do if not locked
fi