2010-10-31 6 views
5

In meiner build.xml, ich möchte den Äquivalent von cmd1 | xargs cmd2 (und auch die Liste der Dateien von cmd1 in die Variable ${dependencies}), wo cmd1 gibt eine Newline-getrennte Liste von Pfaden. Ich kann nicht herausfinden, wie man das in Ant macht.Wie ersetzt man Newline in Ameise in outputfilterchain?

<project default="main"> 
    <target name="main"> 
     <exec executable="echo" 
      outputproperty="dependencies"> 
      <arg value="closure/a.js&#xa;closure/b.js&#xa;closure/c.js"/> 
      <redirector> 
       <outputfilterchain> 
        <replacestring from="${line.separator}" to=" "/> 
        <!-- None of these do anything either: 
        <replacestring from="\n" to=" "/> 
        <replacestring from="&#xa;" to=" "/> 
        <replaceregex pattern="&#xa;" replace=" " flags="m"/> 
        <replaceregex pattern="\n" replace=" " flags="m"/> 
        <replaceregex pattern="${line.separator}" replace=" " flags="m"/> 
        --> 
       </outputfilterchain> 
      </redirector> 
     </exec> 
     <!-- Later, I need to use each file from ${dependencies} as an argument 
      to a command. --> 
     <exec executable="echo"> 
      <!--This should turn into 3 arguments, not 1 with newlines.--> 
      <arg line="${dependencies}"/> 
     </exec> 
    </target> 
</project> 

Antwort

6

Dieser Filter könnte für den ersten Teil tun - es nimmt jedoch an, dass keine Ihrer Dateien mit einem Leerzeichen beginnen.

<outputfilterchain> 
    <prefixlines prefix=" " /> 
    <striplinebreaks /> 
    <trim /> 
</outputfilterchain> 

Es Präfixe jede Zeile mit einem Raum, entfernt dann die Zeilenumbrüche - eine einzige Zeile mit allen durch einzelne Leerzeichen voneinander getrennten Dateinamen zu geben, aber mit einem Leerzeichen am Anfang. Also die trim wird verwendet, um das abzuschlagen.

2

Danke martin. Ich fand auch eine andere Lösung beim Lesen der filterchain documentation sorgfältiger.

<outputfilterchain> 
    <tokenfilter delimoutput=" "> 
     <!--The following line can be omitted since it is the default.--> 
     <linetokenizer/> 
    </tokenfilter> 
</outputfilterchain> 
Verwandte Themen