Aus einer Git-Konsole heraus: Wie führe ich eine Batch-Datei aus und kehre dann zur Git-Konsole zurück?

Lesezeit: 7 Minuten

Aus einer Git Konsole heraus Wie fuhre ich eine Batch Datei aus
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…

  • Ja, ich wollte dies auch für Sie posten – der Grund könnte hier liegen (es ist ein bekanntes Problem): code.google.com/p/msysgit/issues/detail?id=426

    – rlegendi

    9. August 2012 um 8:18 Uhr

  • 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


1645909091 899 Aus einer Git Konsole heraus Wie fuhre ich eine Batch Datei aus
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.B some-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

Aus einer Git Konsole heraus Wie fuhre ich eine Batch Datei aus
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.

  • Installieren und verwenden ConEmu.

  • 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)

1645909092 511 Aus einer Git Konsole heraus Wie fuhre ich eine Batch Datei aus
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

Aus einer Git Konsole heraus Wie fuhre ich eine Batch Datei aus
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

868130cookie-checkAus einer Git-Konsole heraus: Wie führe ich eine Batch-Datei aus und kehre dann zur Git-Konsole zurück?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy