Shell-Script
xdg-open 打開指定的 htm 文件但忽略頁面內的標記 (#) 位置
我在 bash 腳本 (openWebPage) 中有一個函式,我想打開一個網頁並導航到頁面內的 id 標記。
url 組件保存在變數中
PIXPAGE="/home/bu5hman/pix/pixpages/media.bu5hman.2005-.video.htm" TT="tt0078435"
對函式的呼叫組成變數
openWebPage "$PIXPAGE#$TT"
在函式中,如果我直接使用具有指定標籤的文件 url 對我的預設瀏覽器(seamonkey)的呼叫進行硬編碼
/home/bu5hman/Installs/seamonkey/seamonkey "file://$1"
頁面在所需的標籤處打開,但是使用
xdg-open "file://$1"
打開頂部的網頁,但不導航到頁面內的標籤。
當直接呼叫瀏覽器時,它會在導航欄中打開完整的 url 和標籤,但是當使用 xgd-open 呼叫時,它會在導航欄中去掉標籤 (#tt0078435) 的 url 打開。
似乎 xdg-open 在將標籤傳遞給應用程序之前從 url 中剝離了標籤。
除了使用腳本為預設瀏覽器詢問系統並編寫直接呼叫之外,有沒有辦法阻止 xdg-open 剝離標籤或替代跨平台呼叫以在標籤處打開網頁?
感謝@Ignacio Vazquez-Abrams 的指點,找到了解決方案。
問題實際上在於
xdg-open
將參數傳遞給預設應用程序的方式。如果預設應用程序在kde 桌面中註冊以便期望 url (%u)
/home/bu5hman/Installs/seamonkey/seamonkey %u
然後傳遞給的整個參數
xdg-open
用作url,瀏覽器導航到標籤。如果省略 %u,
xdg-open
則測試傳遞給的參數以查看它是否是文件,然後從 url 中的 # 中刪除資訊(來自xdg-open
腳本)# If argument is a file URL, convert it to a (percent-decoded) path. # If not, leave it as it is. file_url_to_path() { local file="$1" if echo "$file" | grep -q '^file:///'; then file=${file#file://} file=${file%%#*} #<---------- file=$(echo "$file" | sed -r 's/\?.*$//') local printf=printf if [ -x /usr/bin/printf ]; then printf=/usr/bin/printf fi file=$($printf "$(echo "$file" | sed -e 's@%\([a-f0-9A-F]\{2\}\)@\\x\1@g')") fi echo "$file" }
並且頁面只在頂部打開。
在我的情況下,firefox 已經註冊了 %u 和 seamonkey 沒有,這就是為什麼我在兩個瀏覽器中有不同的行為。