EXEC args (value) mit Anführungszeichen unter linux aus Ant-script
bash-shell:
./mimic_cmd "startDaemon()"
Entsprechenden Ant-code:
<exec failonerror="true" executable="/bin/mimic_cmd">
<arg value='"startDaemon()"' />
</exec>
- Hat die Ameise code genau darstellen, den oben genannten Befehl in die bash-shell? Auf der Grundlage der debug-info, so sieht es aus:
[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.
Jedoch, die Ameise-code zurück und exit-code von 1, während der Bash-shell-Befehl " 0 " zurückgibt.
Umschalten vmlauncher nicht helfen, und die Pfade sind alle korrekt.
Den gleichen Ant code funktioniert unter windows mit der daraus resultierenden debug-Ausgabe:
[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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie uns sagen, was
mimic_cmd
ist? (Ist es ein ELF executable, ist es ein Skript -- und wenn ja, was ist dessen Inhalt?)Du brauchen nicht noch wollen, dass die doppelten Anführungszeichen, in Ihrem ANT-XML-Attribute (übrigens, es zu sein wohlgeformtes XML, das Sie geschrieben haben soll Sie als
"
nicht"
, aber das ändert nichts in Bezug auf diese Diskussion), es sei denn, die ausführbare Datei von Ihnen erwartet. Die entsprechenden ANT-code für eines der folgenden (100% entspricht) shell-Befehlszeilen:...eigentlich ist:
...oder für illustrative Zwecke:
Warum das so ist, langatmig zu erklären, genügt, um zu sagen, dass Sie in Ihrem spezifischen Fall haben, das einzige mal, wenn Sie möchte haben doppelte Anführungszeichen verwenden wäre, wenn die letztlich den Befehl über eine *nix-shell (entweder interaktiv oder als Teil einer anderen Skript-oder programmgesteuert über die
exec
ingsh -c
), und nur, damit die Schale nicht zu denken, dass die Runden Klammern()
eine Besondere Bedeutung haben. Von der Zeit würde die Schale wiederum spawnmimic_cmd
es wäre schon ausgezogen Anführungszeichen (und ersetzt backslash-Escape-Sequenzen etc. -- siehe wie eine *nix-shell parst die Kommandozeile) ANT nicht führen Sie Ihr Kommando über die shell sondern führt es direkt, also in diesem Fallmimic_cmd
findet sich mit einer Reihe von doppelten Anführungszeichen auf seine hand, die er anscheinend nicht weiß, wie Sie zu behandeln.Sie im wesentlichen zu denken, dass der Austausch alle Formen der shell-quoting und escaping mit XML-Flucht und breaing nach unten in
<arg/>
tags.Windows'
CMD.EXE
ist Besondere in dem Sinne, dass, unline *nix-shells, es ist minimal analysieren (und in der Regel kümmert sich nicht um die doppelten Anführungszeichen im Programm-Argumente), so dass es dem Programm, um herauszufinden, was Sie bedeutete, zu zitieren. (Dies ist eigentlich eine harte Einschränkung von Windows'CreateProcess
die nicht die Vorstellung vonargv[]
, so dass es für jedes Programm zu intepretlpCommandLine
in welcher Weise es für richtig hält; einige loswerden die Zitate für Sie, aber das Verhalten ist sehr widersprüchlich, z.B. Ausgabeecho "bla"
auf dieCMD.EXE
Eingabeaufforderung, um zu sehen, wasCMD.EXE
's gelieferten denken zu zitieren.) Wieder, in Ihrem Fall die Runden Klammern()
haben keine Bedeutung fürCMD.EXE
so brauchen Sie nicht Sie selbst, wenn Sie den Befehl an einer Eingabeaufforderung. Wie für die ANT, auf Windows als auch auf *nix-Plattformen, es spwansmimic_cmd
überCreateProcess
nichtCMD.EXE
so dass Sie nicht wirklich wollen, zu zitieren, nichts./bin/mimic_cmd "createNewWorkspace(blah)"
Arbeit auf einem *nix-Kommandozeile? Wenn dem so ist,<exec failonerror="true" executable="/bin/mimic_cmd"><arg value="createNewWorkspace(blah)" /></exec>
sollte genauso gut funktionieren in ANT. Wennblah
ist selbst ein string, es würde mehr bekommen, interessant:/bin/mimic_cmd "createNewWorkspace(\"blah\")"
oder/bin/mimic_cmd 'createNewWorkspace("blah")'
in einer shell oder in ANT,...<arg value="createNewWorkspace("blah")" />...