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

11

La plupart des systèmes fournissent une opencommande (alternativement appelée start, cygstart, xdg-openetc.) 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?

Cheezmeister
la source

Réponses:

21

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

cmd.exe /C start <file>
Martijn Laarman
la source
Fonctionne pour moi pour les chemins relatifs, pour les chemins absolus, j’ai écrit un script pour remplacer / mnt / c par c: ... | sed 's/\/mnt\/\(.\)/\1:/1' | xargs cmd.exe /C start
Michael,
1
Belle solution. Nous pouvons également accéder aux fichiers sur le système de fichiers Linux en utilisant les informations de superuser.com/q/1110974/66714 . Quelque chose comme cmd.exe /c start "%localappdata%/lxss/$(readlink -f $some_relative_path)"maintenant nous cuisinons avec le feu!
Cheezmeister
2

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 du 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 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
Gilbert
la source
0

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 l'explorateur, 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")
}
en douceur
la source
0

Comme Martijn l'a noté, c'est la manière correcte d'exécuter / ouvrir un fichier / une application Windows.

cmd.exe /C start <file>

J'ai trouvé très utile de travailler cela dans un script bash que je garde dans un dossier qui se trouve dans mon chemin système. Je le nomme startet fais chmod 0744au fichier pour le rendre exécutable. Le $*signifie qu'il passera tous les arguments de ligne de commande que vous avez fournies au script cmd.exe.

#!/bin/bash
cmd.exe /c start $*

Avec cette commande dans mon chemin système, je peux commander des commandes comme celle-ci sous Linux s’ouvrant sous Windows:

  1. start FileXYZ.pdf // Ouvre le PDF dans la visionneuse PDF attribuée par défaut sous Windows
  2. start explorer . // Ouvre le dossier WSL actuel dans l'explorateur Windows.
  3. start MyApp.exe // lance l'application Windows
pseudosavant
la source
-2

L' interface Windows-Linux de WSL fonctionnant en octobre , j'imagine que vous devriez pouvoir utiliser Windows startdirectement dans Bash, tout comme dans Powershell.
Il suffit d'appeler avecstart.exe

Hmijail
la source
1
Ca ne marche pas pour moi C'est peut-être parce que je l'utilise réellement zsh. Est-ce que ça marche pour toi?
Cheezmeister
1
rien de tel questart.exe
Steven Penny