エクスポート変数パスでエスケープされた空白(Ubuntu 22.04.1 LTS)

エクスポート変数パスでエスケープされた空白(Ubuntu 22.04.1 LTS)

私はWSL2(Ubuntu 22.04.1 LTS)を使用しており、xdg-openを入手するにはEdge-browserを参照する必要があります。パスにスペースがあるためエラーが発生します。この空間からどのように脱出できますか?エクスポートされた変数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はいシェルスクリプト$BROWSER試行するブラウザのコロンで区切られたリストとして処理され($PATH動作方法に似て)、各ブラウザに対して実行を試みます。

$browser "$url"

引用されていない内容で$browser。これはスペース(*)に分割され、これに対して実行できる操作がないことを意味します。欠点は、空白のあるパスが機能せず、グローバル文字のあるパスが問題を引き起こす可能性があることです。利点は、これを使用してパラメータを渡すことができることです(そのパラメータに含まれるスペースなどが必要ない場合)。

IFS(*これは、スクリプトの外部から変更された値を取得し、スクリプトの起動時にリセットを無視するシェルで実行されない限り、スクリプトが使用しているように見えるデフォルトです。)IFS

最も簡単な回避策は、おそらくパスに空白のないシンボリックリンクを作成し、それをブラウザに割り当ててから、シンボリックリンクへのパスを作成することです$BROWSER

関連情報