我使用 WSL2 (Ubuntu 22.04.1 LTS),需要引用 Edge-browser 来获取 xdg-open。由于路径中的空格,我收到错误。我怎样才能逃离这个空间?路径在导出的变量 BROWSER 中正确显示。
oliverk@KPW00WP3Q:/mnt/c/Users/E547766/Documents$ export BROWSER="/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe"
oliverk@KPW00WP3Q:/mnt/c/Users/E547766/Documents$ xdg-open https://stackoverflow.com/questions/24683221
/usr/bin/xdg-open: 882: /mnt/c/Program: not found
/usr/bin/xdg-open: 882: /mnt/c/Program: not found
xdg-open: no method available for opening 'https://stackoverflow.com/questions/24683221'
oliverk@KPW00WP3Q:/mnt/c/Users/E547766/Documents$ export BROWSER='/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe'
oliverk@KPW00WP3Q:/mnt/c/Users/E547766/Documents$ xdg-open https://stackoverflow.com/questions/24683221
/usr/bin/xdg-open: 882: /mnt/c/Program: not found
/usr/bin/xdg-open: 882: /mnt/c/Program: not found
xdg-open: no method available for opening 'https://stackoverflow.com/questions/24683221'
oliverk@KPW00WP3Q:/mnt/c/Users/E547766/Documents$ $BROWSER
-bash: /mnt/c/Program: No such file or directory
oliverk@KPW00WP3Q:/mnt/c/Users/E547766/Documents$ export
declare -x BROWSER="/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe"
答案1
您还可以使用旧式 Windows 路径 ~1
export BROWSER=/mnt/c/Progra~1/Google/Chrome/Application/chrome.exe
答案2
$ export BROWSER="/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe" $ xdg-open https://stackoverflow.com/questions/24683221 /usr/bin/xdg-open: 882: /mnt/c/Program: not found
该错误消息很大程度上暗示了分词的实际情况。
就是这样。xdg-open
是一个 shell 脚本它将被视为$BROWSER
要尝试的以冒号分隔的浏览器列表(类似于$PATH
工作原理),并且对于每个浏览器,它都会尝试运行
$browser "$url"
与$browser
未引用的。这意味着它会在空格(*)上被分割,并且您对此无能为力。其缺点是带有空格的路径不起作用,并且带有全局字符的路径可能会出现问题。好处是您可以使用它来传递参数(前提是这些参数不需要嵌入空格等)。
(* 这是脚本似乎使用的 default ,除非它从脚本外部获取修改后的值,并且使用忽略在脚本开始时IFS
重置的 shell 运行。)IFS
最简单的解决方法可能是创建一个路径中没有空格的符号链接,将其指向浏览器并将符号链接的路径添加到$BROWSER
.