Aus einer Git-Konsole heraus: Wie führe ich eine Batch-Datei aus und kehre dann zur Git-Konsole zurück?
Lesezeit: 7 Minuten
Ecken
Ich habe ein kleines Utility-Skript namens clear.bat das erledigt etwas Haushaltsarbeit an meinen Quellen.
Es ist ein .bat Datei, sodass ich sie im Windows Explorer einfach doppelklicken konnte.
Manchmal finde ich es praktischer, es von meiner Git-Bash auszuführen (msysgit, falls das wichtig ist).
Dazu tippe ich
cmd
clear.bat
exit
cmd verwandelt meine Git-Bash in eine normale cmd Fenster, in dem ich meinen Batch problemlos ausführen konnte. Wenn ich tippe exitder cmd -Umgebung wird beendet und ich bin wieder in meiner Git-Bash.
Könnte dies auf einfachere Weise erreicht werden?
Ich habe es versucht cmd /C clean.bat seit die Dokumente sagen
Syntax
CMD [charset] [options]
CMD [charset] [options] [/c Command]
CMD [charset] [options] [/k Command]
Options
/C Run Command and then terminate
/K Run Command and then return to the CMD prompt.
This is useful for testing, to examine variables
Bearbeiten:
Habe gerade gesehen, dass der Pfosten kaputt ist.
Was ich will, ist auszuführen clean.bat innerhalb der Git-Bash, ohne die drei obigen Befehle eingeben zu müssen (cmd, clear.bat, exit). Ich möchte nur die ausführen .bat Datei aus meiner Git-Bash. Offensichtlicher Weg wäre, eine separate zu erstellen .sh Datei, die die gleiche Arbeit macht, aber dies führt zu doppeltem Code.
Bearbeiten 2:
Wenn ich exekutiere cmd /C clean.bat, verwandelt sich die Git-Bash in eine einfache CMD-Umgebung und zeigt nur die Eingabeaufforderung an. Die Datei clean.bat wird nicht ausgeführt. Es ist genauso, als ob ich nur tippe cmd.
Auch das Hinzufügen von a /debug Schalter tut buchstäblich nichts. Scheint nur cmd ausgewertet und alle weiteren Parameter werden ignoriert.
OK, dann bin ich mir nicht sicher, ob ich das Problem verstehe.
– CB Bailey
8. August 2012 um 14:01 Uhr
Was war die Ausgabe, die Sie erhalten haben, als Sie es taten? cmd /C clean.bat ? Vielleicht möchten Sie versuchen, einige Anführungszeichen um die Zeichenfolge zu werfen, oder die /K Option statt /Coder Hinzufügen /debug (nicht sicher, ob Debug helfen wird, aber es klingt gut).
– Sunil D.
8. August 2012 um 17:44 Uhr
Eine genauere Erklärung finden Sie hier: Weirdness when running CMD.exe /C under Git bash
– hakre
15. März 2014 um 14:17 Uhr
cmd /C funktioniert nicht in Git Bash, weil es denkt /C ist ein Weg und verwandelt ihn in C:`. Use cmd //C` statt dessen. Siehe den Link von @hakre für weitere Details.
– Joey Adams
10. November 2014 um 15:36 Uhr
Mögliches Duplikat von Bash in Git für Windows: Weirdness when running a command with CMD.exe /C with args
– Aserre
11. Juni 2019 um 10:41 Uhr
Nachdem ich ein bisschen mehr rumgespielt habe, habe ich die Lösung selbst gefunden:
cmd "/C clean.bat"
macht den Trick. Aber ich habe keine Ahnung, warum…
Gibt es eine Möglichkeit, auch Parameter zu senden?
– dr3w
29. Oktober 2013 um 11:15 Uhr
@eckes nein, funktioniert bei mir nicht. Ich versuche, cmd auszuführen "/C nvmw help" und bekomme einen Fehler: The syntax of the command is incorrect.während einfach cmd "/C nvmw" funktioniert
– dr3w
30. Oktober 2013 um 13:49 Uhr
Ich habe dafür ein Git-Bash-Skript namens “bat” geschrieben, jetzt können Sie bat mybat.bat auf der Befehlszeile ausführen und es wird #!/bin/bash cmd “/C $1” ausführen.
– Rückfall
5. April 2014 um 7:04 Uhr
Das Folgende löst das Problem mit den Argumenten. Spoiler: //c. stackoverflow.com/a/21907301/435605
– AlikElzin-kilaka
30. Juli 2015 um 10:51 Uhr
halbe Kartoffel
./clear.bat wird den Trick machen.
im alten (aber vom Unternehmen gebündelten) msysgit 1.8.0 führt dies die .bat als Bash-Skript aus
– Bernhard Paulus
7. August 2017 um 9:08 Uhr
Fügen Sie vielleicht hinzu, dass dies eine neue Funktionalität ist, die zum Zeitpunkt der Frage nicht verfügbar war?
– kalj
1. Februar 2018 um 13:43 Uhr
Das scheint zu funktionieren, aber woher weiß Git Bash, dass es sich um eine Batch-Datei handelt?
– Hallo Auf Wiedersehen
14. Dezember 2018 um 11:26 Uhr
Typischerweise gibt die Shebang-Zeile (dh #!/bin/bash) an, was Bash verwenden soll, um die Datei auszuführen. Unter Windows besteht das Standardverhalten ohne Shebang jedoch darin, die Datei wie eine Bash-Datei zu behandeln.
– halbe Kartoffel
21. Mai 2019 um 18:07 Uhr
Beachten Sie, dass es hierfür eine Einschränkung gibt; wenn Ihre Datei mehr als eine Erweiterung hat – z.Bsome-file.extension.cmd – Sie können am Ende bekommen Permission denied. Für diese Fälle müssen Sie tun cmd "/c some-file.extension.cmd".
– Marco Craveiro
16. März 2021 um 10:31 Uhr
Yitzhak Steinmetz
Die Git für Windows (msysGit wurde durch Git für Windows ersetzt1) FAQ sagt, du hast 3 Möglichkeiten:
Führen Sie Programme aus, die Probleme bei der Verwendung von haben winpty Nützlichkeit. Dies ermöglicht es Ihnen, das nettere Mintty-Terminal weiter zu verwenden, kann jedoch unhandlich werden, wenn Sie die Problemumgehung für viele Programme benötigen.
Ändern Sie die Verknüpfung für die Ausführung von Git Bash bash direkt ohne mintty Es verwendet also den Standardkonsolenhost und konfiguriert ihn für “Schnellbearbeitung”, angemessene Größe und Zurückscrollen sowie geeignete Unicode-Schriftart. Mit den anderen Macken des Konsolenhosts müssen Sie noch leben.
Nö. Die FAQ sagt Einige native Konsolenprogramme funktionieren nicht, wenn sie von Git Bash ausgeführt werden. Wie man es repariert?. Dies bedeutet, dass beispielsweise einige Programme abstürzen können, wenn Sie sie aus der Git-Bash heraus ausführen. Aber das ist nicht das Thema, das oben diskutiert wurde. Tatsächlich besteht das Problem immer noch (versucht mit 2.6.1.windows.1 (neueste und beste)), sogar bei Verwendung von ConEmu!
– eckes
16. Oktober 2015 um 12:27 Uhr
Hast du versucht winpy? Es hat für mich funktioniert. Lauf einfach winpty clean.bat
– Yitzhak Steinmetz
16. Oktober 2015 um 12:34 Uhr
Nein, habe ich nicht. Da dieses Verhalten der bash jedoch bekannt ist, ist es nicht verwunderlich, dass winpty – neben seiner eigentlichen Aufgabe – auch dieses Problem behebt. Aber die richtige Lösung ist zu verwenden cmd //c (stackoverflow.com/questions/21357813/…) und keine andere Software installieren!
– eckes
16. Oktober 2015 um 12:41 Uhr
winpty kommt aus der Box mit Git Bash. Ich würde es ausprobieren, bevor ich es ausschließe.
– Yitzhak Steinmetz
16. Oktober 2015 um 12:43 Uhr
cmd ist auch ein anderes Programm, und die Syntax cmd //c clean.bat ist definitiv umständlicher als winpty clean.bat. Ich habe die anderen beiden Optionen für die allgemeine Antwort zitiert, auch wenn sie möglicherweise nicht auf Ihr spezifisches Problem zutreffen.
– Yitzhak Steinmetz
17. Oktober 2015 um 17:41 Uhr
ich mag start clean, es öffnet sich ein neues Fenster mit cmd. Diese Methode hat einige Vorteile:
cmd.exe erhält eine native Konsole
Die neue Konsole hat eine native Windows-Zeichenkodierung (zB cp1251 vs utf8)
Andy
Irgendwann fügte Git für Windows Unterstützung für die MSYS_NO_PATHCONV Umgebungsvariable, also können Sie zusätzlich zu den Lösungen @eckes und @AlikElzin-kilaka auch
MSYS_NO_PATHCONV=1 cmd /c clean.bat
Im Allgemeinen bevorzuge ich diese Lösung, da der Code so der normalen Bash am nächsten kommt und es viele Möglichkeiten zum Exportieren gibt MSYS_NO_PATHCONV abhängig von Ihrer bevorzugten Situation.
Hinweis: Die Bash von Git für Windows unterstützt die Umgebungsvariable MSYS2 nicht MSYS2_ARG_CONV_EXCL
Die anderen Lösungen
Die seltsame Zitatlösung
Warum tut cmd "/c clean.bat" keine anderen Fehler erstellen?
Es stellt sich heraus, dass das Analysieren von Argumenten in Windows nicht denselben universellen Regeln folgt wie in *nix. Stattdessen werden die Argumente in Windows basierend auf der Laufzeit, für die Sie kompilieren, unterschiedlich analysiert. Grundsätzlich werden in Windows die Befehlszeilenargumente als “eine Zeichenfolge” übergeben und dann von der Laufzeit analysiert.
Sehen Hier für mehr Erklärungen, als Sie sich jemals wünschen könnten.
Z.B cmd analysiert dann Argumente anders wscript.exe
Am Ende können Sie hoffentlich etwas finden, das mit dieser Methode funktioniert, und es ist die “fensterartigste” der drei Lösungen
Die Methode
Das ist ziemlich gut erklärt Hier und einfach zu bedienen, fügt aber ein Extra hinzu / was der Lesbarkeit nicht hilft
Was ist, wenn ich Systemvariablen in Git Bash bearbeiten möchte? .bat Datei? Wie kann ich das machen? Zum Beispiel ein .bat Datei, die eine einfache Variable definiert.
– Royi
13. November 2021 um 16:21 Uhr
Anschu Kumar
Dies wird funktionieren und es befreit auch das Terminal
nohup ./nucleus.bat &
less nohup.out
Was ist, wenn ich Systemvariablen in Git Bash bearbeiten möchte? .bat Datei? Wie kann ich das machen? Zum Beispiel ein .bat Datei, die eine einfache Variable definiert.
– Royi
13. November 2021 um 16:21 Uhr
8681300cookie-checkAus einer Git-Konsole heraus: Wie führe ich eine Batch-Datei aus und kehre dann zur Git-Konsole zurück?yes
OK, dann bin ich mir nicht sicher, ob ich das Problem verstehe.
– CB Bailey
8. August 2012 um 14:01 Uhr
Was war die Ausgabe, die Sie erhalten haben, als Sie es taten?
cmd /C clean.bat
? Vielleicht möchten Sie versuchen, einige Anführungszeichen um die Zeichenfolge zu werfen, oder die/K
Option statt/C
oder Hinzufügen/debug
(nicht sicher, ob Debug helfen wird, aber es klingt gut).– Sunil D.
8. August 2012 um 17:44 Uhr
Eine genauere Erklärung finden Sie hier: Weirdness when running CMD.exe /C under Git bash
– hakre
15. März 2014 um 14:17 Uhr
cmd /C
funktioniert nicht in Git Bash, weil es denkt/C
ist ein Weg und verwandelt ihn inC:`. Use
cmd //C` statt dessen. Siehe den Link von @hakre für weitere Details.– Joey Adams
10. November 2014 um 15:36 Uhr
Mögliches Duplikat von Bash in Git für Windows: Weirdness when running a command with CMD.exe /C with args
– Aserre
11. Juni 2019 um 10:41 Uhr