![从适用于 Linux 的 Windows 子系统在主机系统中打开浏览器?](https://linux22.com/image/1544620/%E4%BB%8E%E9%80%82%E7%94%A8%E4%BA%8E%20Linux%20%E7%9A%84%20Windows%20%E5%AD%90%E7%B3%BB%E7%BB%9F%E5%9C%A8%E4%B8%BB%E6%9C%BA%E7%B3%BB%E7%BB%9F%E4%B8%AD%E6%89%93%E5%BC%80%E6%B5%8F%E8%A7%88%E5%99%A8%EF%BC%9F.png)
我有一个 ruby 脚本,其中包含以下行:
system("open '#{html_path}'")
html_path
是本地文件的路径.html
。因此,脚本会打开一个浏览器,我通常可以在其中检查和查看此文件。
与 MacOS 环境不同,这在 WSL 中不起作用bash
。运行脚本没有什么发生了,当我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 内部没有可用的浏览器。
我能以某种方式设置这个BROWSER
变量以便在 WSLsee
内部工作吗?bash
附加问题:如果是,我该如何让 ruby 脚本工作没有更改该代码?这是一个外部依赖项 :/
答案1
安装西弗吉尼亚大学并添加export BROWSER=wslview
到你的$HOME/.bashrc
(或等效的,如果你使用其他 shell)
答案2
您可以设置BROWSER
变量。有一个长篇文章解释如何设置环境变量。
如果您想为当前终端会话设置变量,您可以使用:
export BROWSER='/mnt/c/Program Files/Firefox/firefox.exe'
(假设您想使用 Firefox 并且已将其安装在C:\Program Files\Firefox\firefox.exe
)
如果你想执着的,您可以将上述行添加到文件中~/.bashrc
。
答案3
由于某种原因,WSL 可以看到 Windows 文件资源管理器。如果你这样做:
explorer.exe Preview.html
在控制台中它应该在默认的 Windows 网络浏览器中打开。
答案4
结合以上两个答案,最简单的解决方案是将 BROWSER 设置为 Windows 文件资源管理器,以便使用默认的 Windows Web 浏览器
export BROWSER='/mnt/c/Windows/explorer.exe'