Es gibt verschiedene Möglichkeiten, verschiedene Befehle für bashund auszuführencmd mit demselben Skript .
cmdignoriert 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 cmdZeilen 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 cmdist, können wir Folgendes tun:
# 2>nul & echo Hello cmd! & rem ^
echo 'Hello bash!' #
Das #Zeichen am cmdZeilenanfang machtbash behandelt diese Zeile als Kommentar.
Das #Zeichen am Ende der bashZeile wird verwendet, um das \rZeichen zu kommentieren , wie Brian Tompsett in seiner Antwort hervorhob . Andernfalls bashwird ein Fehler \r\nausgegeben, wenn die Datei Zeilenenden hat, die von erforderlich sind cmd.
Auf diese Weise # 2>nulversuchen 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 PATHoder wenn Sie keine Kontrolle über die verfügbaren Befehle haben cmd.
Verwenden Sie echo, um das #Zeichen zu ignorierencmd
Wir können echomit seiner umgeleiteten Ausgabe cmdBefehle in bashden 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 echoBefehls umzuleiten und danach andere Befehle einzufügen.
Leere #.batDatei
echo >/dev/null # 1>nul 2> #.bat
# & echo Hello cmd! & del #.bat & rem ^
echo 'Hello bash!' #
Die echo >/dev/null # 1>nul 2> #.batZeile erstellt im eingeschalteten Zustand eine leere #.batDatei cmd(oder ersetzt vorhandene #.bat, falls vorhanden) und im eingeschalteten Zustand nichts bash.
Diese Datei wird von den folgenden cmdZeilen verwendet, auch wenn sich #auf dem Befehl ein anderer Befehl befindet PATH.
Der del #.batBefehl für den cmdspezifischen Code löscht die erstellte Datei. Sie müssen dies nur in der letzten cmdZeile tun .
Verwenden Sie diese Lösung nicht, wenn sich eine #.batDatei in Ihrem aktuellen Arbeitsverzeichnis befinden könnte, da diese Datei gelöscht wird.
Empfohlen: Verwenden Sie here-document , um cmdBefehle zu ignorierenbash
:; echo 'Hello bash!';<<:
echo Hello cmd! & ^
:
Wenn Sie das ^Zeichen am Ende der cmdZeile 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 cmdwird 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 cmdgenaue Linie gibt here-document delimiter, sollte diese Lösung funktionieren. Sie können here-document delimiterzu 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\nals Zeilenumbrüche in Dateien gespeichert werden , da sie sonst nicht funktionieren cmd.