私はRubyこの行を含むスクリプトを持っています:
system("open '#{html_path}'")
html_path
は、ローカルの.html
ファイルへのパスです。したがって、スクリプトはブラウザーを開き、通常はこのファイルを検査および表示できます。
MacOS環境とは対照的に、これはWSLのbash
では機能しません。スクリプトの実行nothingが発生し、コンソールでopen
呼び出しを直接実行すると、次のようになります。
sujan@LenovoX1:/mnt/c/Users/Jan/Documents/foo$ open Preview.html
Couldn't get a file descriptor referring to the console
私はすでに open
がUbuntuで何か異なることをする を調査したので、see
またはxdg-open
を使用してファイルを開く必要があります。
残念ながら、これらもWSLでは機能しません。
sujan@LenovoX1:/mnt/c/Users/Jan/Documents/foo$ see ./Preview.html
Unescaped left brace in regex is deprecated, passed through in regex; marked by <-- HERE in m/%{ <-- HERE (.*?)}/ at /us
r/bin/see line 528.
Couldn't find a suitable web browser!
Set the BROWSER environment variable to your desired browser.
Warning: program returned non-zero exit code #1
そして
sujan@LenovoX1:/mnt/c/Users/Jan/Documents/foo$ xdg-open ./Preview.html
Unescaped left brace in regex is deprecated, passed through in regex; marked by <-- HERE in m/%{ <-- HERE (.*?)}/ at /us
r/bin/run-mailcap line 528.
Couldn't find a suitable web browser!
Set the BROWSER environment variable to your desired browser.
Warning: program returned non-zero exit code #1
/usr/bin/xdg-open: 771: /usr/bin/xdg-open: www-browser: not found
/usr/bin/xdg-open: 771: /usr/bin/xdg-open: links2: not found
/usr/bin/xdg-open: 771: /usr/bin/xdg-open: elinks: not found
/usr/bin/xdg-open: 771: /usr/bin/xdg-open: links: not found
/usr/bin/xdg-open: 771: /usr/bin/xdg-open: lynx: not found
/usr/bin/xdg-open: 771: /usr/bin/xdg-open: w3m: not found
xdg-open: no method available for opening './Preview.html'
これについて考えると、これは理にかなっています。WSL内で使用できるブラウザーはありません。
WSLのBROWSER
内でsee
が機能するように、このbash
変数を何らかの方法で設定できますか?
おまけの質問:はいの場合、コードを変更せずにRubyスクリプトをせずに動作させるにはどうすればよいですか?外部依存関係です。 :/
BROWSER
変数を設定できます。 環境変数の設定方法を説明する長い記事 があります。
現在のターミナルセッションの変数を設定する場合は、次のコマンドを使用できます。
export BROWSER='/mnt/c/Program Files/Firefox/firefox.exe'
(Firefoxを使用してC:\Program Files\Firefox\firefox.exe
にインストールする場合)
これを persistent にしたい場合は、上記の行をファイル~/.bashrc
に追加できます。
何らかの理由で、WSLはWindowsファイルエクスプローラーを表示できます。もし、するなら:
Explorer.exe Preview.html
コンソールでは、デフォルトのWindows Webブラウザーで開きます。
上記の2つの答えを組み合わせると、最も簡単な解決策は、デフォルトのWindows Webブラウザーを使用するために、ブラウザーをWindowsファイルエクスプローラーに設定することです。
export BROWSER='/mnt/c/Windows/Explorer.exe'
WSLUをインストールし、「BROWSER = wslview」を使用します
以前の回答に基づく
_export BROWSER=/some/path/to/chrome.exe
_があなたが探している解決策である可能性がありますが、Chromeのデフォルトパスは/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe
(シェルがエスケープするためのスペースと括弧を含むパス)です。アプリケーションが引用符で囲まれたバージョンの変数_"${BROWSER}"
_を使用する場合、これは正常に機能し、Chromeを正常に開きます。ただし、引用符で囲まれていない変数_$BROWSER
_を使用すると、bashはそれを個別の変数と見なします。これは、_xdg-open
_などの一部のツールで機能しなくなります。
これを回避するのは簡単です。スペースのないパスにシンボリックリンクできます。
_ln -s "/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe" ~/.local/bin/chrome
export BROWSER=~/.local/bin/chrome
_
または、_update-alternatives
_を Brett として使用することもできます。結局のところ、これもシンボリックリンクですが、リンクが指す場所を更新する必要がある場合やその必要がある場合に、より多くの可視性があります。
_update-alternatives --install "bin/Host_chrome" "chrome" "/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe" 1
export BROWSER=Host_chrome
_