Как заменить символ новой строки в ant в outputfilterchain? - PullRequest
5 голосов
/ 31 октября 2010

В моем build.xml я хочу сделать эквивалент cmd1 | xargs cmd2 (а также сохранить список файлов из cmd1 в переменную ${dependencies}), где cmd1 дает разделенный новой строкой списокпути.Я не могу понять, как это сделать в Ant.

<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>

Ответы [ 2 ]

6 голосов
/ 31 октября 2010

Этот фильтр может быть полезен для первой части - предполагается, что ни один из ваших файлов не начинается с пробела.

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

Он ставит перед каждой строкой пробел, затем удаляет разрывы строк - давая одну строку со всеми именами файлов, разделенными пробелами, но с одним пробелом в начале. Таким образом, trim используется, чтобы отрубить это.

2 голосов
/ 31 октября 2010

Спасибо, Мартин.Я также нашел другое решение, прочитав документацию по цепочке фильтров более внимательно.

<outputfilterchain>
    <tokenfilter delimoutput=" ">
        <!--The following line can be omitted since it is the default.-->
        <linetokenizer/>
    </tokenfilter>
</outputfilterchain>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...