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

如何移除Perforce表单触发器生成的描述首字符$

解决Perforce触发器脚本中变更描述首字符多余$的问题

在Linux环境的Perforce服务器上配置form-out触发器,通过存储在depot中的bash脚本自动替换变更列表的默认描述。单行描述正常,但多行描述采用ANSI-C转义语法($'...')后,生成的描述开头会多出一个$符号,示例输出:

$Jira Ticket: High level summary
    - Detailed change #1
    - Detailed change #2

触发器配置如下:

Triggers:
    desc-out form-out change "sh %//tools/main/Perforce/defaultChangelist.sh% out %formfile%"

脚本核心代码片段:

mydesc=$'Jira Ticket: High level summary\n\t- Detailed change #1\n\t- Detailed change #2'

case $opt in
    "out")
        sed -i "s|<enter description here>|$mydesc|" "$2"
        ;;
    # ... 其他逻辑
esac

问题根源

Linux系统中sh通常是dash的软链接,而dash不支持bash特有的ANSI-C转义字符串语法(即$'...'格式)。当用sh执行脚本时,$'Jira...'会被解析为字符$加上普通字符串'Jira...',导致描述开头多出$符号。

两种解决方法

方法1:修改触发器调用命令,用bash执行脚本

将触发器中的sh替换为bash,确保脚本用支持ANSI-C转义的bash解释器执行:

Triggers:
    desc-out form-out change "bash %//tools/main/Perforce/defaultChangelist.sh% out %formfile%"

方法2:替换ANSI-C转义语法,改用兼容所有shell的写法

如果无法修改触发器配置,可将脚本中的$'...'替换为printf生成多行字符串,兼容sh/dash:

# 替换原来的mydesc定义
mydesc=$(printf "Jira Ticket: High level summary\n\t- Detailed change #1\n\t- Detailed change #2")

或者直接写入带实际换行和制表符的字符串(需确保脚本编辑时保留换行):

mydesc="Jira Ticket: High level summary
	- Detailed change #1
	- Detailed change #2"

验证效果

修改后,生成的变更描述将不再包含多余的$符号:

Jira Ticket: High level summary
    - Detailed change #1
    - Detailed change #2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 17:08:32