Argomenti della riga di comando di Apache Ant senza virgolette - è possibile?
-
05-07-2019 - |
Domanda
Oggi ho dovuto aggiungere un'attività a un file Ant Apache. La riga di comando avrebbe dovuto essere simile a
myprogram --param1 --param2 path\somefile 2> path\logfile
Il problema era che se avessi usato qualcosa di simile al seguente
<exec executable="$(myprogram)"
<arg value="--param1">
<arg value="--param2">
<arg path="$(somefile)">
<arg value="2>">
<arg path="$(logfile)">
</exec>
sono stati citati tutti gli argomenti, quindi il comando era simile al seguente:
myprogram "--param1" "--param2" "path\somefile" "2>" "path\logfile"
che non è male e particolarmente bello se hai spazi nel tuo file / percorso, ma distrugge la pipe nel file di log (invece, il programma pensa che ci siano due argomenti di file aggiuntivi " 2 > " e " path \ logfile ").
Ho aggirato questo problema chiamando invece uno script batch che vuole solo i file come parametri, ma mi chiedevo: è possibile farlo senza una soluzione?
Soluzione
Quando si esegue " myprogram --param1 --param2 path \ somefile 2 > percorso \ logfile " ;, gli argomenti del programma terminano con " 2 > " ;. Il reindirizzamento dei file è un'operazione della shell, che non viene utilizzata dall'interno di formica. Se dai un'occhiata ai documenti per task ant exec , vedrai che supporta il reindirizzamento tramite l'attributo output .
Altri suggerimenti
Hai provato <arg line="..." />
?
L'attività ant exec ha un parametro di output in cui è possibile specificare il file di registro senza richiedere il piping della riga di comando, combinato con il parametro append per determinare se il file di output deve essere sovrascritto o accodato.
Ho avuto un uguale problema come l'antipasto dell'argomento. Su una riga di comando di esecuzione Java avevo bisogno di aggiungere i file di origine come argomenti separati, non come un argomento con virgolette attorno ad essi.
Ho usato il tag <arg value="..." />
, ma l'uso di <arg line="..." />
come suggerito da nullptr ha risolto il mio problema.