Pregunta

Hoy tuve que agregar una tarea a un archivo Apache Ant. La línea de comando debería haber sido algo así como

myprogram --param1 --param2 path\somefile 2> path\logfile

El problema con esto era que si usaba algo como lo siguiente para esto

<exec executable="$(myprogram)"
  <arg value="--param1">
  <arg value="--param2">
  <arg path="$(somefile)">
  <arg value="2>">
  <arg path="$(logfile)">
</exec>

se citaron todos los argumentos, por lo que el comando se veía así:

myprogram "--param1" "--param2" "path\somefile" "2>" "path\logfile"

que no es malo y especialmente agradable si tiene espacios en sus archivos / ruta, pero destruye la tubería al archivo de registro (en cambio, el programa cree que hay dos argumentos de archivo adicionales " 2 > " y " ruta \ logfile ").

Trabajé alrededor de esto llamando a un script por lotes que solo quiere los archivos como parámetros, pero me preguntaba: ¿es posible hacer esto sin una solución alternativa?

¿Fue útil?

Solución

Cuando ejecuta " myprogram --param1 --param2 path \ somefile 2 > ruta \ archivo de registro " ;, los argumentos de su programa terminan en " 2 > " ;. La redirección de archivos es una operación de su shell, que no se usa desde dentro de Ant. Si mira los documentos para la tarea ant exec , verá que admite la redirección a través del atributo salida .

Otros consejos

¿Has probado <arg line="..." />?

La tarea ant exec tiene un parámetro de salida en el que puede especificar el archivo de registro sin requerir la canalización de la línea de comandos, combinado con el parámetro anexar para determinar si el archivo de salida debe sobrescribirse o agregarse.

Tuve el mismo problema que el iniciador del tema. En una línea de comando de ejecución de Java, necesitaba agregar archivos de origen como argumentos separados, no como un argumento con comillas a su alrededor. Usé la etiqueta <arg value="..." />, pero usar <arg line="..." /> como nullptr sugirió resolvió mi problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top