You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本无法写入Perforce提交者信息至CSV文件求助

问题解决:Perforce提交者信息无法写入CSV文件

原脚本核心问题分析

  1. 本地路径与Perforce仓库路径不匹配:p4 describe需要的是Perforce仓库中的文件路径(如//depot/path/to/file.c),但脚本中提取的$file是本地目录路径,Perforce无法识别。
  2. 提交者信息提取逻辑错误:原awk命令会同时输出变更号和用户名,导致submitter变量包含换行符,写入CSV时格式混乱且不符合预期。
  3. CSV格式不规范:未添加表头,且用空格分隔数据,与预期的制表符分隔格式不符。
  4. 变量未加引号:目录路径或文件名含空格时,diff等命令会解析错误。

修复后的脚本

#!/bin/bash

# 配置Perforce环境变量
export P4PORT="perforceserver:port"
export P4USER="user"
export P4PASSWD=""

# 设置本地目录(dir2为Perforce同步到本地的目录)
local_dir1="/home/user1/code1/"
local_dir2="/home/user1/code2/"
# 对应的Perforce仓库根路径(需要根据实际depot路径修改)
depot_root="//depot/project/"

# 设置CSV输出文件
csvfile="comparison.csv"

# 写入CSV表头
echo -e "Type\tcode1\tcode2\tDiffer\tPerforceOwner" > "$csvfile"

# 对比目录并处理结果
diff -rq "$local_dir1" "$local_dir2" | sed 's/: /\t/g' | while read -r line; do
    # 提取本地文件路径(处理diff输出的两种格式:"Files X and Y differ" 或 "Only in X: Y")
    case "$line" in
        "Files"*)
            local_file1=$(echo "$line" | awk -F'\t' '{print $2}')
            local_file2=$(echo "$line" | awk -F'\t' '{print $4}')
            # 从本地路径转换为Perforce仓库路径(假设local_dir2对应depot_root)
            depot_file=${local_file2//$local_dir2/$depot_root}
            differ_status="differ"
            ;;
        "Only in"*)
            # 处理仅存在于某一边的文件,可根据实际需求补充逻辑
            continue
            ;;
    esac

    # 提取Perforce提交者用户名
    submitter=$(p4 describe -s "$depot_file" | awk '/^User/ {print $2}')
    # 处理文件不存在于Perforce的情况
    if [ -z "$submitter" ]; then
        submitter="Unknown"
    fi

    # 格式化输出到CSV(匹配预期格式)
    echo -e "Files\t$(basename "$local_file1")\t$(basename "$local_file2")\t$differ_status\t$submitter" >> "$csvfile"
done

关键修改说明

  • 路径映射:新增depot_root变量,将本地文件路径替换为Perforce仓库路径,确保p4 describe能找到对应文件。
  • 提交者提取优化:仅提取User行的用户名,避免多余输出。
  • CSV格式规范:添加表头,用echo -e处理制表符,保证列对齐。
  • 错误处理:判断提交者为空时填充Unknown,避免空值。
  • 变量引号:所有路径变量添加双引号,兼容含空格的路径。

内容的提问来源于stack exchange,提问作者Ekam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 12:57:40