Bash

導出變數中路徑中的轉義空格(Ubuntu 22.04.1 LTS)

  • August 30, 2022

我使用 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"
$ 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未引用的。這意味著它在空格(*)上被拆分,您對此無能為力。這樣做的缺點是帶有空格的路徑不起作用,而帶有全域字元的路徑可能是個問題。好處是您可以使用它來傳遞參數(前提是這些參數不需要嵌入空格等)。

(*IFS這是腳本似乎使用的預設值,除非它從腳本外部獲取修改後的值並使用忽略IFS在腳本開始時重置的 shell 執行。)

最簡單的解決方法可能是創建一個在其路徑中沒有空格的符號連結,將其指向瀏覽器並將符號連結的路徑添加到$BROWSER.

引用自:https://unix.stackexchange.com/questions/715378