Il existe plusieurs façons d'exécuter différentes commandes sur bash
y cmd
avec le même script.
cmd
ignorera les lignes qui commencent par :;
comme indiqué dans d'autres réponses. Il ignorera également la ligne suivante si la ligne actuelle se termine par la commande rem ^
comme le ^
permettra d'échapper au saut de ligne et la ligne suivante sera traitée comme un commentaire par rem
.
Quant à la fabrication bash
ignorer le cmd
les lignes, il y a plusieurs façons. J'ai énuméré quelques façons de le faire sans rompre la cmd
des commandes :
Non-existant #
commande (non recommandé)
S'il n'y a pas de #
disponible sur cmd
lorsque le script est exécuté, nous pouvons faire ceci :
# 2>nul & echo Hello cmd! & rem ^
echo 'Hello bash!' #
Le site #
au début de l'élément cmd
la ligne fait bash
traiter cette ligne comme un commentaire.
Le site #
à la fin de l'élément bash
est utilisée pour commenter la ligne \r
personnage, comme l'a souligné Brian Tompsett dans sa réponse . Sans cela, bash
lancera une erreur si le fichier a \r\n
les fins de ligne, requises par cmd
.
En faisant # 2>nul
on est en train de tromper cmd
d'ignorer l'erreur d'un certain inexistant #
tout en exécutant la commande qui suit.
N'utilisez pas cette solution s'il existe une #
disponible sur le PATH
ou si vous n'avez aucun contrôle sur les commandes disponibles à cmd
.
Utilisation de echo
d'ignorer le #
caractère sur cmd
Nous pouvons utiliser echo
avec sa sortie redirigée vers l'insert cmd
commandes sur bash
de la zone commentée :
echo >/dev/null # >nul & echo Hello cmd! & rem ^
echo 'Hello bash!' #
Depuis le #
n'a pas de signification particulière sur cmd
il est traité comme une partie du texte à l'adresse suivante echo
. Tout ce que nous avions à faire, c'était de rediriger la sortie de la fonction echo
et insérer d'autres commandes après elle.
Vide #.bat
fichier
echo >/dev/null # 1>nul 2> #.bat
# & echo Hello cmd! & del #.bat & rem ^
echo 'Hello bash!' #
Le site echo >/dev/null # 1>nul 2> #.bat
crée une ligne vide #.bat
pendant que vous êtes sur cmd
(ou remplace les #.bat
le cas échéant), et ne fait rien tant que l'on est sur bash
.
Ce fichier sera utilisé par le cmd
ligne(s) qui suit(ent) même s'il existe une autre #
sur le PATH
.
Le site del #.bat
sur le cmd
-Un code spécifique supprime le fichier qui a été créé. Vous ne devez le faire que sur le dernier cmd
ligne.
N'utilisez pas cette solution si un #.bat
pourrait se trouver dans votre répertoire de travail actuel, car ce fichier sera effacé.
Recommandé : utiliser ici-document d'ignorer cmd
commandes sur bash
:; echo 'Hello bash!';<<:
echo Hello cmd! & ^
:
En plaçant le ^
à la fin de l'élément cmd
nous échappons le saut de ligne, et en utilisant :
comme délimiteur du document, le contenu de la ligne du délimiteur n'aura aucun effet sur cmd
. Par là, cmd
n'exécutera sa ligne qu'après le :
est terminée, ayant le même comportement que bash
.
Si vous voulez avoir plusieurs lignes sur les deux plateformes et ne les exécuter qu'à la fin du bloc, vous pouvez faire ceci :
:;( #
:; echo 'Hello' #
:; echo 'bash!' #
:; );<<'here-document delimiter'
(
echo Hello
echo cmd!
) & rem ^
here-document delimiter
Tant qu'il n'y a pas cmd
avec exactement here-document delimiter
cette solution devrait fonctionner. Vous pouvez modifier here-document delimiter
à tout autre texte.
Dans toutes les solutions présentées, les commandes ne seront exécutées qu'après la dernière ligne ce qui rend leur comportement cohérent s'ils font la même chose sur les deux plateformes.
Ces solutions doivent être enregistrées dans des fichiers avec \r\n
comme des sauts de ligne, sinon ils ne fonctionneront pas sur cmd
.