Bash
導出變數中路徑中的轉義空格(Ubuntu 22.04.1 LTS)
我使用 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
.