Istnieje kilka sposobów wykonywania różnych poleceń w tym samym skrypcie bash
i za cmd
pomocą tego samego skryptu.
cmd
zignoruje wiersze zaczynające się od :;
, jak wspomniano w innych odpowiedziach. Zignoruje również następną linię, jeśli bieżąca linia kończy się poleceniem rem ^
, ponieważ ^
znak uniknie końca linii, a następna linia będzie traktowana jako komentarz przez rem
.
Jeśli chodzi o bash
ignorowanie cmd
wierszy, istnieje wiele sposobów. Wyliczyłem kilka sposobów, aby to zrobić bez łamania cmd
poleceń:
Nieistniejące #
polecenie (niezalecane)
Jeśli po uruchomieniu skryptu nie jest #
dostępne żadne polecenie cmd
, możemy to zrobić:
# 2>nul & echo Hello cmd! & rem ^
echo 'Hello bash!' #
#
Charakter na początku cmd
marek linii bash
traktują tę linię jako komentarz.
#
Znaków na końcu bash
linii jest używany do ustosunkowania się, \r
znak, jak Brian Tompsett wskazał w swojej odpowiedzi . Bez tego bash
zgłosi błąd, jeśli plik ma \r\n
zakończenia linii, wymagane przez cmd
.
W ten # 2>nul
sposób oszukujemy, cmd
aby zignorować błąd jakiegoś nieistniejącego #
polecenia, jednocześnie wykonując następujące polecenie.
Nie używaj tego rozwiązania, jeśli #
polecenie jest dostępne na stronie PATH
lub jeśli nie masz kontroli nad poleceniami dostępnymi dla cmd
.
Używając, echo
aby zignorować #
włączony znakcmd
Możemy użyć echo
z przekierowanym wyjściem do wstawiania cmd
poleceń w bash
zakomentowanym obszarze:
echo >/dev/null # >nul & echo Hello cmd! & rem ^
echo 'Hello bash!' #
Ponieważ #
znak nie ma specjalnego znaczenia cmd
, jest traktowany jako część tekstu do echo
. Wszystko, co musieliśmy zrobić, to przekierować wyjście echo
polecenia i wstawić po nim inne polecenia.
Pusty #.bat
plik
echo >/dev/null # 1>nul 2> #.bat
# & echo Hello cmd! & del #.bat & rem ^
echo 'Hello bash!' #
echo >/dev/null # 1>nul 2> #.bat
Linia tworzy pusty #.bat
plik while on cmd
(lub zastępuje istniejące #.bat
, jeśli w ogóle), a nie robi nic na while bash
.
Plik ten będzie używany przez cmd
linię (S), który następuje, nawet jeśli jest jakaś inna #
komenda na PATH
.
del #.bat
Polecenia na cmd
kodzie swoistej wobec usuwa plik, który został utworzony. Musisz to zrobić tylko w ostatniej cmd
linii.
Nie używaj tego rozwiązania, jeśli #.bat
plik może znajdować się w Twoim bieżącym katalogu roboczym, ponieważ zostanie on usunięty.
Zalecane: używanie dokumentu here do ignorowania cmd
poleceń nabash
:; echo 'Hello bash!';<<:
echo Hello cmd! & ^
:
Umieszczając ^
znak na końcu cmd
linii, unikamy podziału wiersza i używając :
jako separatora dokumentu w tym miejscu, zawartość linii separatora nie będzie miała wpływu na cmd
. W ten sposób cmd
wykona swoją linię dopiero po jej zakończeniu :
, zachowując się tak samo jak bash
.
Jeśli chcesz mieć wiele linii na obu platformach i wykonywać je tylko na końcu bloku, możesz to zrobić:
:;( #
:; echo 'Hello' #
:; echo 'bash!' #
:; );<<'here-document delimiter'
(
echo Hello
echo cmd!
) & rem ^
here-document delimiter
Dopóki nie ma cmd
dokładnej linii here-document delimiter
, to rozwiązanie powinno działać. Możesz zmienić here-document delimiter
na dowolny inny tekst.
We wszystkich przedstawionych rozwiązaniach polecenia będą wykonywane dopiero po ostatniej linii , dzięki czemu ich zachowanie będzie spójne, jeśli zrobią to samo na obu platformach.
Te rozwiązania muszą zostać zapisane w plikach z \r\n
podziałem wiersza, w przeciwnym razie nie będą działać cmd
.