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

使用进程替换执行svnadmin setrevprop失败求助

问题原因与解决方案

这个问题的核心是你误解了svnadmin setrevprop的参数用法以及进程替换的作用方式,让我拆解清楚:

为什么你的命令会失败?

当你执行:

svnadmin setrevprop -r1 MyRepoDir svn:author <(echo -n NewAuthor)

这里的<(echo -n NewAuthor)是bash的进程替换语法,它会创建一个临时伪文件(比如/dev/fd/63),并把这个伪文件的路径作为位置参数直接传递给svnadmin。但svnadmin setrevprop的规则是:

  • 如果最后一个参数是字符串,它会直接把这个字符串设为属性内容;
  • 只有省略属性值参数时,它才会从标准输入(stdin)读取内容。

你的命令相当于让svnadmin把作者名设为那个伪文件的路径字符串,但svnadmin对这类特殊路径做了过滤或解析出错,最终导致属性值被设为空。

而你用真实文件时能成功,大概率是因为你用了正确的读取方式——比如用-F参数指定文件,或者通过输入重定向让svnadmin从stdin读取文件内容。

正确的两种写法

要让进程替换配合svnadmin setrevprop正常工作,你有两种选择:

1. 使用-F参数指定伪文件

svnadmin的-F选项专门用来指定读取属性值的文件路径,进程替换生成的伪文件完全符合要求:

svnadmin setrevprop -r1 MyRepoDir svn:author -F <(echo -n NewAuthor)

2. 通过输入重定向让svnadmin从stdin读取

省略属性值参数,用输入重定向把进程替换的输出导入svnadmin的标准输入:

svnadmin setrevprop -r1 MyRepoDir svn:author < <(echo -n NewAuthor)

这里的< <(...)是bash中“进程替换作为输入重定向”的写法,和直接用< 真实文件的逻辑完全一致。

额外注意点

  • 确保你使用的是支持进程替换的shell(比如bash、zsh),sh等POSIX标准shell不支持这个语法;
  • echo -n的作用是避免输出末尾的换行符,这很重要——如果属性值带换行符,svnadmin可能会把换行符也当作属性内容的一部分,或者解析出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:47:17