2012-05-06 21 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

這些反斜槓都不是必需的。這些管道充當續行字符,其他行只需要換行符或空格(如果您嘗試創建單行程序,則需要分號)。 –