11Sep

Comment exécuter des programmes Windows à partir du shell Bash de Windows 10

Dans la mise à jour des créateurs, le shell Bash de Windows 10 vous permet désormais d'exécuter des binaires Windows et des commandes standard, à partir de Bash. Vous pouvez exécuter des programmes Linux et Windows à partir du même shell Bash, ou même incorporer des commandes Windows dans un script Bash.

Ce que vous devez savoir

Voici quelques informations de base sur cette fonction: Compte utilisateur

  • : Les programmes lancés à partir du shell Bash fonctionneront comme s'ils avaient été lancés par le compte d'utilisateur Windows actuel.
  • Autorisations : Ces programmes auront les mêmes permissions que le processus Bash.exe. Donc, si vous voulez que ces commandes aient un accès administrateur, vous devrez exécuter le shell Bash en tant qu'administrateur.
  • Répertoire de travail : Les programmes Windows partagent le même "répertoire de travail" que le shell Bash. Ainsi, si vous exécutez une commande qui répertorie le contenu du répertoire en cours, il affichera le contenu du répertoire de travail en cours dans le shell Bash. Utilisez la commande cd pour changer les répertoires de travail.

Dans cet esprit, regardons comment lancer un programme.

Comment exécuter un programme Windows

Pour exécuter un programme Windows, entrez le chemin d'accès au fichier. exe du programme dans le shell Bash. N'oubliez pas que votre lecteur Windows C: est disponible sur /mnt/ c dans Bash. L'environnement Bash est également sensible à la casse, vous devez donc spécifier la bonne capitalisation.

Disons que vous vouliez lancer l'utilitaire Ping situé dans C: \ Windows \ System32 \ PING.EXE.Vous devez exécuter la commande suivante:

/mnt/c/Windows/System32/ PING.EXE

La commande suivante ne fonctionnerait pas, car Bash est sensible à la casse:

/mnt/c/windows/system32/ ping.exe

Ceci est un peu plus compliqué si le chemin contient des caractères complexes comme des espaces et des crochets,comme les dossiers Program Files. Vous devez "échapper" des espaces, des parenthèses et d'autres caractères complexes en les préfixant avec un caractère "\".

Par exemple, supposons que vous vouliez exécuter le programme Internet Explorer situé dans C: \ Program Files( x86) \ Internet Explorer \ iexplore.exe. Vous devez exécuter la commande suivante dans Bash:

/mnt/c/ Programme \ Files \ \( x86 \) / Internet \ Explorateur / iexplore.exe

Notez le "\" avant les caractères espace et crochet. Ces caractères doivent être "échappés" ou Bash ne réalisera pas que les caractères font partie d'un chemin de fichier.

Comment passer un argument à une commande

Le shell Bash passe les arguments directement aux commandes que vous exécutez.

Par exemple, si vous vouliez faire un ping sur example.com, vous exécuteriez:

/mnt/c/Windows/System32/ PING.EXE example.com

Ou, si vous vouliez ouvrir le fichier hosts Windows dans le Bloc-notes, vous exécuteriez:

/mnt/c/Windows/System32/ notepad.exe "C: \ Windows \ System32 \ drivers \ etc \ hosts "

Vous utilisez le chemin d'accès standard du fichier Windows lors de la transmission directe d'un chemin de fichier à un programme Windows. C'est parce que Bash passe l'argument directement. Notepad.exe et d'autres programmes Windows attendent un chemin de fichier Windows.

Procédure d'exécution d'une commande intégrée

Certaines commandes Windows ne sont pas des fichiers. exe, mais sont intégrées à l'invite de commande elle-même. Par exemple, cela inclut la commande dir que vous pouvez normalement exécuter dans une invite de commandes. Pour exécuter une telle commande, vous devez exécuter le binaire cmd.exe associé à l'invite de commande et lui passer la commande en tant qu'argument avec / C, comme ceci:

/mnt/c/Windows/System32/ commande cmd.exe / C

Par exemple, pour exécuter le répertoirecommande intégrée à l'invite de commande, vous devez exécuter la commande suivante:

/mnt/c/Windows/System32/ cmd.exe / C dir

Comment ajouter des répertoires au chemin

L'environnement Windows Services pour Linux traite les exécutables Windows de la même manière que les binaires Linux. Cela signifie que vous pouvez ajouter un répertoire contenant des fichiers. exe au chemin, puis exécuter directement ces fichiers. exe. Par exemple, pour ajouter le répertoire System32 à votre chemin, vous devez exécuter:

export PATH = $ PATH: /mnt/c/Windows/ System32

Vous pouvez ensuite exécuter directement les fichiers Windows. exe situés dans le dossier System32, comme ceci:

PING.exe exemple.com notepad.exe cmd.exe / C dir

Comment faire passer la sortie d'une commande à une autre

La sortie d'une commande Windows peut être redirigée vers une commande Linux, et vice versa. Par exemple, vous pouvez utiliser la commande ipconfig.exe -all pour répertorier les détails de vos interfaces réseau et les acheminer vers la commande Linux grep pour rechercher la sortie. Par exemple, pour répertorier toutes les informations sur votre connexion et rechercher des sections correspondant à "Adresse IPv4", vous devez exécuter:

/mnt/c/Windows/System32/ ipconfig.exe -all |grep "Adresse IPv4"

C'est le processus de base. Ces commandes fonctionneront également lorsqu'elles seront intégrées dans un script Bash, ce qui vous permettra d'écrire un script Bash intégrant à la fois les commandes Windows et les utilitaires Linux. S'il s'exécute dans le shell Bash, il fonctionnera dans un script Bash.

Et, si vous voulez aller dans l'autre sens, vous pouvez utiliser la commande "bash -c" pour exécuter les commandes Bash à partir de l'invite de commandes Windows standard.

Articles connexes
Comment créer et exécuter des scripts shell Bash sous Windows 10
Comment faire pour exécuter des commandes Linux à partir de l'extérieur du shell Bash sur Windows 10