EXEC args (valeur) avec les citations sur linux à partir du script Ant
shell bash:
./mimic_cmd "startDaemon()"
Correspondant Ant code:
<exec failonerror="true" executable="/bin/mimic_cmd">
<arg value='"startDaemon()"' />
</exec>
- Ne la Fourmi de code exactement représentent la commande ci-dessus dans le shell bash? Basé sur les informations de débogage, il ressemble à ça:
[exec] Executing '/bin/mimic_cmd' with arguments: [exec] '"startDaemon()"' [exec] [exec] The ' characters around the executable and arguments are [exec] not part of the command. Execute:Java13CommandLauncher: Executing '/bin/mimic_cmd' with arguments: '"startDaemon()"' The ' characters around the executable and arguments are not part of the command.
Cependant, la Fourmi code retourne et le code de sortie 1, tandis que le shell Bash commande retourne 0.
Basculement vmlauncher n'aide pas, et les chemins sont tous corrects.
La même Fourmi code fonctionne sur windows avec la sortie de débogage:
[exec] Executing 'C:\bin\mimic_cmd' with arguments: [exec] '"startDaemon()"' [exec] [exec] The ' characters around the executable and arguments are [exec] not part of the command. Execute:Java13CommandLauncher: Executing 'C:\bin\mimic_cmd' with arguments: '"startDaemon()"' The ' characters around the executable and arguments are not part of the command.
OriginalL'auteur | 2010-03-03
Vous devez vous connecter pour publier un commentaire.
Pouvez-vous nous dire ce que
mimic_cmd
est? (Est-ce un exécutable ELF, est-il un script -- et si oui, quel est son contenu?)Vous n'avez pas besoin et ne veulent pas les guillemets à l'intérieur de votre ANT attributs XML (d'ailleurs, pour qu'il soit XML bien formé, vous devriez les avoir écrits
"
pas"
, mais cela ne change rien à l'égard de cette discussion), à moins que votre exécutable attend d'eux. Le correspondant ANT code pour une des opérations suivantes (100% équivalent) shell lignes de commande:...en fait est:
...ou, pour des fins d'illustration:
Pourquoi est longwinded à expliquer, suffit de dire que, dans votre cas précis, la seule fois où vous auriez à utiliser des guillemets lorsque, finalement, l'émission de la commande par l'intermédiaire d'un *nix shell (soit de façon interactive ou en tant que partie d'un autre script, ou par programmation via le
exec
ing desh -c
), et uniquement dans le but pour que le shell ne pas penser que le cycle de parens()
ont une signification spéciale. Par le temps que la coque serait à son tour frayermimic_cmd
il aurait déjà dépouillé les guillemets doubles (et substitué par un anti-slash-échappé séquences, etc. -- voir comment un *nix shell analyse de sa ligne de commande) ANT n'est pas exécuté votre commande par le shell, mais plutôt l'exécute directement, dans ce cas,mimic_cmd
se retrouve avec un tas de guillemets sur sa main qui apparemment, il ne sait pas comment gérer.Vous avez à penser à elle en tant que remplacement de toutes les formes de coque de devis et de s'enfuir avec XML s'échapper et breaing vers le bas dans
<arg/>
balises.Windows
CMD.EXE
est spécial dans le sens que, unline *nix coques, il effectue un minimum d'analyse (et généralement ne se soucie pas de guillemets dans les arguments du programme), laissant le programme de comprendre ce que tu voulais dire en citant. (C'est en fait un dur limitation de WindowsCreateProcess
qui n'ont pas la notion deargv[]
, en laissant à chaque programme de intepretlpCommandLine
dans n'importe quelle manière il l'entend; quelques-uns se débarrasser des citations pour vous, mais ce comportement est très irrégulière, par exemple sur la questionecho "bla"
sur leCMD.EXE
invite à voir ceCMD.EXE
's les builtins penser à le citer.) Encore une fois, dans votre cas, la ronde des parens()
n'ont pas de sens pourCMD.EXE
de sorte que vous n'avez pas besoin d'eux, même lors de la saisie de la commande à l'invite de commande. Comme pour ANT, sur Windows que sous *nix plates-formes, il spwansmimic_cmd
viaCreateProcess
pasCMD.EXE
de sorte que vous n'avez pas vraiment envie de citer quoi que ce soit.Hmm... attention à ceux qui la ronde des parens sans les guillemets sur *nix, ils font probablement quelque chose derrière votre dos, vous ne vous attendez pas... ne tapant
/bin/mimic_cmd "createNewWorkspace(blah)"
travailler sur un *nix ligne de commande? Si oui,<exec failonerror="true" executable="/bin/mimic_cmd"><arg value="createNewWorkspace(blah)" /></exec>
aussi bien dans ANT. Siblah
est elle-même une chaîne de il souhaitez obtenir plus intéressant:/bin/mimic_cmd "createNewWorkspace(\"blah\")"
ou/bin/mimic_cmd 'createNewWorkspace("blah")'
dans un shell ou, dans ANT,...<arg value="createNewWorkspace("blah")" />...
OriginalL'auteur vladr