Esistono diversi modi per eseguire comandi diversi sullo stesso script bashe cmdcon lo stesso.
cmdignorerà le righe che iniziano con :;, come menzionato in altre risposte. Ignorerà anche la riga successiva se la riga corrente termina con il comando rem ^, poiché il ^carattere sfuggirà all'interruzione di riga e la riga successiva verrà trattata come un commento da rem.
Per quanto riguarda la possibilità di bashignorare le cmdrighe, ci sono diversi modi. Ho elencato alcuni modi per farlo senza interrompere i cmdcomandi:
#Comando inesistente (sconsigliato)
Se non è #disponibile alcun comando cmdquando lo script viene eseguito, possiamo farlo:
# 2>nul & echo Hello cmd! & rem ^
echo 'Hello bash!' #
Il #carattere all'inizio della cmdriga fa in modo bashche la riga venga trattata come un commento.
Il #carattere alla fine della bashriga viene utilizzato per commentare il \rpersonaggio, come ha sottolineato Brian Tompsett nella sua risposta . Senza questo, bashverrà generato un errore se il file ha \r\nterminazioni di riga, richieste da cmd.
In questo modo # 2>nul, stiamo cercando cmddi ignorare l'errore di un #comando inesistente , mentre eseguiamo ancora il comando che segue.
Non utilizzare questa soluzione se è #disponibile un comando su PATHo se non hai il controllo sui comandi disponibili per cmd.
Usando echoper ignorare il #personaggiocmd
Possiamo usare echocon il suo output reindirizzato per inserire cmdcomandi bashnell'area commentata di:
echo >/dev/null # >nul & echo Hello cmd! & rem ^
echo 'Hello bash!' #
Poiché il #carattere non ha un significato speciale cmd, viene considerato come una parte del testo echo. Tutto quello che dovevamo fare era reindirizzare l'output del echocomando e inserire altri comandi dopo di esso.
#.batFile vuoto
echo >/dev/null # 1>nul 2> #.bat
# & echo Hello cmd! & del #.bat & rem ^
echo 'Hello bash!' #
La echo >/dev/null # 1>nul 2> #.batriga crea un #.batfile vuoto mentre è attiva cmd(o sostituisce esistente #.bat, se presente) e non fa nulla mentre è attiva bash.
Questo file verrà utilizzato dalle cmdrighe che seguono anche se sono presenti altri #comandi nel file PATH.
Il del #.batcomando sul cmdcodice -specific cancella il file che è stato creato. Devi solo farlo sull'ultima cmdriga.
Non utilizzare questa soluzione se un #.batfile potrebbe trovarsi nella directory di lavoro corrente, poiché tale file verrà cancellato.
Consigliato: usare here-document per ignorare i cmdcomandi subash
:; echo 'Hello bash!';<<:
echo Hello cmd! & ^
:
Posizionando il ^carattere alla fine della cmdriga si evita l'interruzione di riga e utilizzando :come delimitatore here-document, il contenuto della riga delimitatore non avrà alcun effetto su cmd. In questo modo, cmdeseguirà la sua riga solo dopo che la :riga è finita, con lo stesso comportamento di bash.
Se vuoi avere più righe su entrambe le piattaforme ed eseguirle solo alla fine del blocco, puoi farlo:
:;( #
:; echo 'Hello' #
:; echo 'bash!' #
:; );<<'here-document delimiter'
(
echo Hello
echo cmd!
) & rem ^
here-document delimiter
Finché non c'è una cmdlinea con esattamente here-document delimiter, questa soluzione dovrebbe funzionare. Puoi passare here-document delimitera qualsiasi altro testo.
In tutte le soluzioni presentate, i comandi verranno eseguiti solo dopo l'ultima riga , rendendo il loro comportamento coerente se fanno la stessa cosa su entrambe le piattaforme.
Queste soluzioni devono essere salvate su file con \r\ninterruzioni di riga, altrimenti non funzioneranno cmd.