xdg-open은 지정된 htm 파일을 열지만 페이지 내의 표시(#) 위치를 무시합니다.

xdg-open은 지정된 htm 파일을 열지만 페이지 내의 표시(#) 위치를 무시합니다.

웹 페이지를 열고 페이지 내의 id 태그로 이동하려는 bash 스크립트(openWebPage)에 함수가 있습니다.

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을 사용하여 호출하면 태그가 제거된 탐색 모음에서 URL이 열립니다(#tt0078435).

xdg-open이 URL을 애플리케이션에 전달하기 전에 URL에서 태그를 제거하는 것처럼 보입니다.

시스템의 기본 브라우저에 요청하고 직접 호출을 작성하는 스크립트를 사용하는 것 외에도 xdg-open이 태그를 제거하는 것을 방지하거나 대체 크로스 플랫폼 호출을 사용하여 태그에서 웹 페이지를 여는 방법이 있습니까?

답변1

@Ignacio Vazquez-Abrams의 팁 덕분에 솔루션을 찾았습니다.

실제로 문제는 xdg-open매개변수가 기본 애플리케이션에 전달되는 방식에 있습니다.

기본 애플리케이션이 등록되어 있는 경우kde 데스크탑URL(%u)을 기대합니다

/home/bu5hman/Installs/seamonkey/seamonkey %u

전달된 전체 매개변수는 xdg-openURL로 사용되고 브라우저는 해당 태그로 이동합니다.

%u가 생략되면 전달된 인수가 파일인지 테스트된 다음 xdg-openURL의 #에서 정보(스크립트의 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는 등록되어 있지 않기 때문에 이 두 브라우저에서 서로 다른 동작을 보이는 것입니다.

관련 정보