web-dev-qa-db-fra.com

Comment puis-je "ouvrir" un fichier WSL avec l'application par défaut?

La plupart des systèmes fournissent une commande open (également appelée start, cygstart, xdg-open etc.) qui ouvre un fichier dans l'application "par défaut" de l'environnement de bureau, quel qu'il soit.

Par exemple, de Powershell quand j'entre:

PS> start form.pdf

Le document s'ouvre dans Edge.

Est-ce que Bash sur Ubuntu sur Windows peut le faire?

9
Cheezmeister

Depuis que l'interopérabilité Windows Linux a commencé à fonctionner, vous pouvez maintenant appeler:

cmd.exe /C start <file>
17
Martijn Laarman

Cela dépend si vous voulez A) lancer un programme Linux dans WSL ou B) vous voulez lancer un programme Windows à partir d'une invite de shell bash.

Si B), alors oui si vous installez cygwin/bash. Par exemple, installez git pour Windows et vous avez un système fonctionnant sous Windows avec bash. Ensuite, vous pouvez simplement lancer start, en fait, il est inclus en tant que script:

$ cat /usr/bin/start
#!/usr/bin/env bash
# Copyright (C) 2014, Alexey Pavlov
#   mailto:[email protected]
# This file is part of Minimal SYStem version 2.
#   https://sourceforge.net/p/msys2/wiki/MSYS2%20installation/
# File: start

cmd //c start "${@//&/^&}"

Si A), cela devient beaucoup plus difficile, surtout si vous voulez lancer un programme Linux pour afficher un fichier .pdf dans une fenêtre graphique. Notez que Windows sait associer une application par défaut pour ouvrir un fichier pdf, mais WSL ne dispose pas des informations. Ainsi, même si vous obteniez un bureau fonctionnant sous WSL , vous auriez besoin d'associer une application d'interface graphique Linux pour ouvrir le fichier PDF.

Remarque pour clarifier, dans WSL, vous exécutez des exécutables linux et non des exécutables Windows:

(WSL):~# file /bin/gzip
/bin/gzip: ELF 64-bit LSB  executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=68cc3c090405cf6d40e97d2ff58085fd26940602, stripped

(WSL):~# file /mnt/c/Program\ Files/Internet\ Explorer/iexplore.exe
 /mnt/c/Program Files/Internet Explorer/iexplore.exe: PE32+ executable (GUI) x86-64, for MS Windows

(WSL):~# /mnt/c/Program\ Files/Internet\ Explorer/iexplore.exe
 bash: /mnt/c/Program Files/Internet Explorer/iexplore.exe: cannot execute binary file: Exec format error
2
Gilbert

J'ai constaté que Explorer.exe fonctionne assez bien pour trouver le chemin résolu correct (même des répertoires de réseau montés) et pour lancer l'outil par défaut. Le seul problème est que vous ne pouvez pas avoir de chemins dans le nom du fichier. Vous devez donc créer une petite fonction/script d'aide pour lancer correctement Explorer, par exemple:

win() { 
    # get full unsymlinked filename 
    file=`readlink -e $1` 
    dir=$(dirname "$file") 
    base=$(basename "$file") 
    # open item using default windows application 
    (cd "$dir"; Explorer.exe "$base")
}
0
mattgately