2012-05-06 16 views
2

作为post-commit挂钩的一部分,我尝试将所有更改为本地文件夹的文件 - 使用此脚本(仅附加脚本的相关部分):bash,在重定向后不能使用xargs replstr

svnlook changed ${REPOS} -r ${REV} | sed "s/^....//" | xargs -I {} svnlook cat ${REPOS} {} -r ${REV} > /tmp/commit2/{} 

它不会用xargs参数替换第二个{},而是按原样使用它(创建文件名'{}')。

是否有可能在输出重定向后替换参数?

感谢, 投资回报率

回答

4

不是那样的,没有。 shell执行重定向,而不是xargsxargs甚至不知道重定向正在发生。

您可以使用类似以下内容:

svnlook changed ${REPOS} -r ${REV} | 
    sed "s/^....//" | 
    while read -r line ; do 
    svnlook cat ${REPOS} "$line" -r ${REV} > /tmp/commit2/"$line" 
    done 
+0

它的工作原理(无前 “完成” 的 “\”)。谢谢! –

+0

Oouups对此感到抱歉,它错过了';'。 – Mat

+0

这些反斜杠都不是必需的。这些管道充当续行字符,其他行只需要换行符或空格(如果您尝试创建单行程序,则需要分号)。 –