回答:
Windows Linuxの相互運用が機能し始めたので、次のように呼び出すことができます。
cmd.exe /C start <file>
cmd.exe /c start "%localappdata%/lxss/$(readlink -f $some_relative_path)"
火のように今調理しています!
これは、A)WSL内でLinuxプログラムを起動するか、B)bashシェルプロンプトからWindowsプログラムを起動するかによって異なります。
B)の場合、cygwin / bashをインストールすればはい。たとえば、Windowsにgitをインストールすると、bashを使用してWindowsでシステムが実行されます。次に、startを実行します。実際にはスクリプトとして含まれています。
$ cat /usr/bin/start
#!/usr/bin/env bash
# Copyright (C) 2014, Alexey Pavlov
# mailto:alexpux@gmail.com
# This file is part of Minimal SYStem version 2.
# https://sourceforge.net/p/msys2/wiki/MSYS2%20installation/
# File: start
cmd //c start "${@//&/^&}"
A)の場合、特にLinuxプログラムを起動して.pdfをGUIウィンドウに表示する場合は、さらに困難になります。Windowsはデフォルトのアプリケーションを関連付けてPDFファイルを開くことを認識していますが、WSLには情報がありません。そのため、WSLでデスクトップを実行している場合でも、pdfを開くにはLinux GUIアプリを関連付ける必要があります。
明確にするために、WSL内では、Windows実行可能ファイルではなくLinux実行可能ファイルを実行します。
(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
Martijnが指摘したように、これはWindowsアプリケーション/ファイルを実行/開く正しい方法です。
cmd.exe /C start <file>
これをbashスクリプトに組み込んで、システムパス内のフォルダーに保存すると非常に便利です。私はそれを名前を付けstart
てみませんかchmod 0744
それが実行可能にするために、ファイルに。これ$*
は、スクリプトに指定したすべてのコマンドライン引数をに渡すことを意味しcmd.exe
ます。
#!/bin/bash
cmd.exe /c start "Launching from BASH" "$*"
このコマンドをシステムパスに含めると、Windowsで開くLinuxで次のようなコマンドを実行できます。
start FileXYZ.pdf
// Windowsのデフォルトで割り当てられたPDFビューアでPDFを開きますstart explorer .
// Windowsエクスプローラで現在のWSLフォルダを開きますstart MyApp.exe
// Windowsアプリケーションを起動しますa\ whitespace.pdf
。のようにスクリプトを開始してstart.sh a\ a.pdf b\ b.pdf
も機能しません。
explorer.exe .
Windowsエクスプローラーで現在のパスを開きます
eopen
WSL内のさまざまなファイル(、ディレクトリ、URI)を開くことができます。
https://github.com/ko1nksm/eopen-ecd
例
# Open directory with (latest used) Explorer
eopen ~/.config/
# Open directory with new instance of Explorer
eopen -n ~/.config/
# Opens with Windows default application
eopen image.png
# Opens with Windows text editor
eopen -e ~/.bashrc
# Use sudo to edit the unowned file
eopen -e --sudo /etc/hosts
# Opens with Windows default browser
eopen http://google.com
# Open files and directories under Windows
eopen C:/Windows
# Open files and directories under Network shared folder
eopen //server/shared
# Others
eopen mailto:user@example.com # Mail protocol
eopen calculator: # Application
eopen shell:Personal # Shell commands
eopen :MyComputerFolder # Shorthand for shell:
eopen shell:::{2559a1f8-21d7-11d4-bdaf-00c04f60b9f0} # CLSID
eopen : # Current Explorer location
eopen :/workspace # Relative path from current Explorer location
Start-Process
WSL内からpowershellのコマンドを呼び出すことができます。
powershell.exe -Command Start-Process file
これを絶対パスでも機能させるには、wslpath -wa
コマンドを使用してパスをWindowsパスに変換します。
powershell.exe -Command Start-Process `wslpath -wa /absolute/path/to/file`
これは、cmd.exe
ソリューションよりも優れています。マウントされたネットワーク共有の場合、のwslpath
ようなUNCパスが生成されます\\server\share\
。これらのUNCパスは、では処理できませんcmd.exe
。
explorer.exeは、正しい解決済みのパス(マウントされたネットワークディレクトリであっても)を見つけ、デフォルトのツールを起動するのに非常にうまく機能することがわかりました。1つ問題があるのは、ファイル名にパスを含めることができないため、エクスプローラーを正しく起動するための小さなヘルパー関数/スクリプトを作成する必要があることです。例:
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")
}
更新: Ngo wslpath
は、パス変換を行う別のスクリプトを指摘したため、パス上で(変換後)explorer.exeを直接呼び出すことができます。その後、上記の関数は簡単になり、簡単にエイリアスにすることができます。
を使用してみてくださいwsl-open
。標準のWindowsアプリケーションでファイルを開き、https://github.com/4U6U57/wsl-openからダウンロードできます。
... | sed 's/\/mnt\/\(.\)/\1:/1' | xargs cmd.exe /C start