Wie pipe-Zeichen in einem argument, um eine batch-Datei aus einem bash-Skript?
Ich habe ein shell-script ist, will ich diese Zeile ausführen:
qtvars.bat vsstart "qt.sln" /BUILD "Debug|Win32"
Dies funktioniert gut (obwohl ich hatte, zu ändern qtvars.bat
, aber das ist neben dem Punkt). Das problem ist, dass ich den Befehl ausführen in variable:
EDIT: Das funktioniert auch nicht, wenn ich geben Sie es in der bash. Zuvor war ich Eingabe in cmd.exe
, die kaum für einen fairen Vergleich.
command="qtvars.bat"
args="vsstart"
$command $args "qt.sln" /BUILD "Debug|Win32"
Nun drosseln auf dem Rohr! Ich bekomme diese Meldung:
'Win32' is not recognized as an internal or external command,
operable program or batch file.
Habe ich versucht, ein Bündel von Formen der Flucht der Zitate und/oder der Leitung, alles ohne Erfolg. Interessanterweise funktioniert es, wenn es eine ausführbare Datei, anstatt eine batch-Datei, z.B.:
command="devenv.exe"
args=""
$command $args "qt.sln" /BUILD "Debug|Win32"
Vielen Dank für alle Ideen.
InformationsquelleAutor Owen | 2009-02-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich weiß, Sie "escape" die pipe-Zeichen in einer batch-Datei mit dem ^ - Zeichen, so dass...
echo ^| some text here ^|
Anzeigen würde...
| Text hier |
Ich weiß nicht, ob das helfen würde, Sie in diesem Fall? Vielleicht versuchen Sie vor jedem pipe-Zeichen mit einem " ^ " und sehen, was passiert? 🙂
InformationsquelleAutor Valiante
Dies ist ein klassischer Fall von Doppel-auf der Flucht vor, wo sowohl die bash und CMD.EXE müssen angewiesen werden, zu ignorieren, die speziellen | (pipe) Zeichen.
Versuchen Sie Folgendes:
Dieser entspricht, die Sie eingeben, in einem CMD.EXE prompt:
Mithilfe der oben genannten, Sie sind im wesentlichen zwingt der Verabschiedung des Doppel-quotes an CMD.EXE (anstelle von bash-Essen Sie Weg.) Die äußerste single quotes bash anweisen, nicht zu interpretieren oder Sie berühren in keiner Weise das, was in Ihnen vorgeht; die inneren doppelten Anführungszeichen weisen CMD.EXE ignorieren von Sonderzeichen (das Rohr in diesem Fall) innerhalb.
Alternativ können Sie auch versuchen:
Sollte dies der entspricht, die Sie eingeben, in einem CMD.EXE prompt:
Beachten Sie die Verwendung von single Zitate (!), die dafür sorgen, dass bash nicht interpretieren \ (und stattdessen übergeben Sie es wie es ist CMD.EXE.)
versuchen Sie, um den set-Befehl "cmd.exe qtvars.Fledermaus"
InformationsquelleAutor vladr
Hier ist eine andere Lösung (Lösung?) Die ich gefunden habe:
zuerst, ob eine Umgebungsvariable definiert das pipe-Zeichen, zum Beispiel:
set PIPE="|"
später, führen Sie den Befehl unter Angabe der oben angegebenen Umgebungsvariable name:
"c:\(...)\devenv.com" foo.sln /build Debug%PIPE%Win32
Dass der job nicht, auch wenn es mehrere Wrapper zwischen dem Anrufer und der angerufene. Ich verwende es jetzt mit einer sehr langen Kette von Wrapper:
Python/Linux -> VirtualBox Gast executeProcess -> Cmd/Windows -> devenv.com
(cross-gepostet: Wie übergibt man eine zitierte pipe-Zeichen zu cmd.exe?)
InformationsquelleAutor rdesgroppes
Flucht ein piping-Zeichen in der Windows-scripting-Sprache mit einem caret-Zeichen (^). Ich hatte gerade zu tun, dies den anderen Tag. Ich weiß, das ist alt, aber ich dachte, ich würde post, was ich gefunden, bei anderen lief über diese, wie ich es Tat.
InformationsquelleAutor John Beavers
Interessant! Was bedeutet die Flucht der
|
tun?Diese Arbeit?
Ich wollte wissen, was war das Ergebnis der Verwendung entkommen?
InformationsquelleAutor dirkgently