Операторы перенаправления и конвейера являются функцией оболочки, C и C # поддерживают перенаправление другими средствами (дескрипторы файлов). Где-то я читал, что, поскольку класс C # Process не поддерживает перенаправление ввода, nant обеспечивает только перенаправление вывода для <exec>
.
Для перенаправления ввода команд мы можем прибегнуть к оболочке:
A) Вызвать cmd.exe
с помощью /c
, как показано в приведенном выше примере с acloutier. Будьте осторожны с пробелами! На самом деле пример терпит неудачу из-за пробела между <
и y.txt
, удалите его, чтобы пример работал. Вы также можете преобразовать атрибут value
в атрибут line
, но тогда вам нужно быть осторожным с цитированием.
B) Поскольку я не мог заставить работать каналы с использованием подхода exec-cmd, вместо этого я генерирую пакетный файл на лету, используя <echo>
:
<echo file="${WD}/login.bat">"${P4}" diff -sd | "${P4}" -x- sync -f using</echo>
<exec program="login.bat" basedir="${WD}" workingdir="${P4.WorkspaceRoot}" />