Es gibt verschiedene Möglichkeiten, verschiedene Befehle für bash
und auszuführencmd
mit demselben Skript .
cmd
ignoriert Zeilen, die mit beginnen :;
, wie in anderen Antworten erwähnt. Die nächste Zeile wird ebenfalls ignoriert, wenn die aktuelle Zeile mit dem Befehl endet rem ^
, da das ^
Zeichen dem Zeilenumbruch entgeht und die nächste Zeile von als Kommentar behandelt wirdrem
.
Es gibt mehrere Möglichkeiten bash
, die cmd
Zeilen zu ignorieren . Ich habe einige Möglichkeiten aufgezählt, um dies zu tun, ohne das zu brechen cmd
Befehle :
Nicht existent #
Befehl (nicht empfohlen)
Wenn beim Ausführen des Skripts kein #
Befehl verfügbar cmd
ist, können wir Folgendes tun:
# 2>nul & echo Hello cmd! & rem ^
echo 'Hello bash!' #
Das #
Zeichen am cmd
Zeilenanfang machtbash
behandelt diese Zeile als Kommentar.
Das #
Zeichen am Ende der bash
Zeile wird verwendet, um das \r
Zeichen zu kommentieren , wie Brian Tompsett in seiner Antwort hervorhob . Andernfalls bash
wird ein Fehler \r\n
ausgegeben, wenn die Datei Zeilenenden hat, die von erforderlich sind cmd
.
Auf diese Weise # 2>nul
versuchen wir cmd
, den Fehler eines nicht vorhandenen #
Befehls zu ignorieren , während der folgende Befehl ausgeführt wird.
Verwenden Sie diese Lösung nicht, wenn #
auf dem Befehl ein Befehl verfügbar ist PATH
oder wenn Sie keine Kontrolle über die verfügbaren Befehle haben cmd
.
Verwenden Sie echo
, um das #
Zeichen zu ignorierencmd
Wir können echo
mit seiner umgeleiteten Ausgabe cmd
Befehle in bash
den auskommentierten Bereich einfügen :
echo >/dev/null # >nul & echo Hello cmd! & rem ^
echo 'Hello bash!' #
Da das #
Zeichen keine besondere Bedeutung hat cmd
, wird es als Teil des Textes behandelt echo
. Alles was wir tun mussten, ist die Ausgabe des echo
Befehls umzuleiten und danach andere Befehle einzufügen.
Leere #.bat
Datei
echo >/dev/null # 1>nul 2> #.bat
# & echo Hello cmd! & del #.bat & rem ^
echo 'Hello bash!' #
Die echo >/dev/null # 1>nul 2> #.bat
Zeile erstellt im eingeschalteten Zustand eine leere #.bat
Datei cmd
(oder ersetzt vorhandene #.bat
, falls vorhanden) und im eingeschalteten Zustand nichts bash
.
Diese Datei wird von den folgenden cmd
Zeilen verwendet, auch wenn sich #
auf dem Befehl ein anderer Befehl befindet PATH
.
Der del #.bat
Befehl für den cmd
spezifischen Code löscht die erstellte Datei. Sie müssen dies nur in der letzten cmd
Zeile tun .
Verwenden Sie diese Lösung nicht, wenn sich eine #.bat
Datei in Ihrem aktuellen Arbeitsverzeichnis befinden könnte, da diese Datei gelöscht wird.
Empfohlen: Verwenden Sie here-document , um cmd
Befehle zu ignorierenbash
:; echo 'Hello bash!';<<:
echo Hello cmd! & ^
:
Wenn Sie das ^
Zeichen am Ende der cmd
Zeile platzieren, entgehen wir dem Zeilenumbruch und wenn Sie es :
als Trennzeichen für das Dokument verwenden, hat der Inhalt der Trennzeichenzeile keine Auswirkung auf cmd
. Auf diese Weise cmd
wird die :
Zeile erst ausgeführt, nachdem die Zeile beendet ist, und hat das gleiche Verhalten wiebash
.
Wenn Sie mehrere Zeilen auf beiden Plattformen haben und diese nur am Ende des Blocks ausführen möchten, können Sie Folgendes tun:
:;( #
:; echo 'Hello' #
:; echo 'bash!' #
:; );<<'here-document delimiter'
(
echo Hello
echo cmd!
) & rem ^
here-document delimiter
Solange es keine cmd
genaue Linie gibt here-document delimiter
, sollte diese Lösung funktionieren. Sie können here-document delimiter
zu jedem anderen Text wechseln .
In allen vorgestellten Lösungen werden die Befehle erst nach der letzten Zeile ausgeführt , wodurch ihr Verhalten konsistent wird, wenn sie auf beiden Plattformen dasselbe tun.
Diese Lösungen müssen \r\n
als Zeilenumbrüche in Dateien gespeichert werden , da sie sonst nicht funktionieren cmd
.