110、【OS】【Nuttx】【周边】效果呈现方案解析:查找最新构建件
【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除
背景
接之前 blog
【OS】【Nuttx】【周边】文档构建渲染:workspaceStorage(上)
【OS】【Nuttx】【周边】文档构建渲染:workspaceStorage(下)
已经分析了 workspaceStorage 里面的内容,有了这个基础,下面回过头再来看
【OS】【Nuttx】【周边】文档构建渲染:效果呈现
这里面的解决方案
方案解析
接下来的内容完全基于之前 blog 【OS】【Nuttx】【周边】文档构建渲染:效果呈现 中的解决方案 preview-rst 脚本,为保证脚本的一致性,这里就不贴出来了,可以直接去之前 blog 查看 preview-rst 脚本
首先,思路是要找到 Esbonio 服务器的构建产物,之前 blog 都提了,构建产物信息在【输出】选项卡可以看到
然后,前面两篇 blog
【OS】【Nuttx】【周边】文档构建渲染:workspaceStorage(上)
【OS】【Nuttx】【周边】文档构建渲染:workspaceStorage(下)
也已经介绍,在 workspaceStorage 工作区,可能存在多个构建产物,比如在终端输入
find ~/.vscode-server -path "*/swyddfa.esbonio/sphinx/html"
这里 -path 是 find 命令的一个过滤选项,表示根据完整路径名来匹配文件或目录
-path 和 -name 都是常用的过滤选项
- -path:匹配完整的路径字符串,比如 -path “*/swyddfa.esbonio/sphinx/html” 表示匹配路径中包含 /swyddfa.esbonio/sphinx/html 的文件
- -name:只匹配文件的名字,比如 -name “*html” 表示匹配所有以 html 结尾的文件
根据“完整路径名”来匹配文件或目录
在服务器上可能出现如下情况
扫描出了多个构建产物,那么这里就涉及到了取舍,大致思路来说,可以选择构建时间最新的文件,那么就着这个思路,再来分析 preview-rst,首先是查找最新的构建产物
- 24~25 行:首先用 local 关键字定义两个局部变量 latest_dir(存放最新的构建路径),max_mtime(存放最新的时间),如果不加 local,那么这两个变量就会变成全局的,污染脚本环境,用 local 表示变量只能在函数内部使用
- 28 行:循环体结构,在 bash 中的语法是
while ...; do# 循环体
done
- 接着要结合 40 行看:这里涉及到 <(…) 进程替换,进程替换是指启动 <(…) 中的命令,并把命令的输出包装成一个伪文件,然后可以像读文件一样读这个伪文件
- 接下来是 <(…) 中的命令
find ~/.vscode-server -path "*/swyddfa.esbonio/sphinx/html" -type d -print0 2>/dev/null
- 整体而言,这条命令表示在特定目录 ~/.vscode-server 下,找出所有路径中包含 */swyddfa.esbonio/sphinx/html 的目录,并以空字符 \0 分隔输出,同时忽略错误信息,下面再部分看:
1、-path:上面解释了,用来匹配完整的路径字符串
2、-type d:只查找目录,不找文件,如果去掉,可能会匹配到 html 文件
3、-print0:比较复杂,这个选项得结合 find 命令一起分析,首先,find 命令的设计思想是:找到 + 动作,find 命令就相当于一个条件引擎:
find [路径] [条件] [动作]
比如上面的命令
- 路径是 ~/.vscode-server
- 条件是路径上包含 */swyddfa.esbonio/sphinx/html,并且只查找目录
- 动作是 -print(将结果打印输出到终端上)
ok,今天先到这里,下篇 blog 继续分析