面试题答案
一键面试1. 确保 PROJECT_ROOT
值正确记录和恢复
- 实现思路:
- 在主脚本引入子脚本之前,保存
PROJECT_ROOT
的初始值。 - 为了保证即使子脚本异常退出,也能恢复
PROJECT_ROOT
,可以使用trap
命令捕获脚本退出信号(如EXIT
),在捕获到信号时恢复PROJECT_ROOT
的初始值。
- 在主脚本引入子脚本之前,保存
- 关键代码片段:
# 保存初始的 PROJECT_ROOT
original_project_root=$PROJECT_ROOT
# 定义恢复函数
restore_project_root() {
PROJECT_ROOT=$original_project_root
}
# 捕获EXIT信号,调用恢复函数
trap restore_project_root EXIT
# 引入子脚本
source sub_script1.sh
source sub_script2.sh
# 其他子脚本引入...
2. 自动更新 PROJECT_FILE_HASH
环境变量
- 实现思路:
- 使用
inotifywait
命令监控PROJECT_ROOT
目录下的文件创建事件。 - 当有新文件创建时,通过
find
命令递归获取该目录下所有文件,并使用md5sum
计算每个文件的 MD5 值,然后求和得到PROJECT_FILE_HASH
的新值。
- 使用
- 关键代码片段:
# 启动监控
while true; do
inotifywait -e create -r $PROJECT_ROOT
# 计算所有文件的MD5哈希值之和
hash_sum=$(find $PROJECT_ROOT -type f -exec md5sum {} + | awk '{sum = sum $1} END {print sum}')
export PROJECT_FILE_HASH=$hash_sum
done &
上述代码中,inotifywait -e create -r $PROJECT_ROOT
用于监控 PROJECT_ROOT
目录及其子目录下的文件创建事件。当有新文件创建时,find $PROJECT_ROOT -type f -exec md5sum {} +
递归查找所有文件并计算其 MD5 值,awk '{sum = sum $1} END {print sum}'
对这些 MD5 值进行求和,最后将和赋值给 PROJECT_FILE_HASH
环境变量。done &
表示将这个监控任务放到后台运行,不影响主脚本的其他逻辑。