웹 페이지를 열고 페이지 내의 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-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는 등록되어 있지 않기 때문에 이 두 브라우저에서 서로 다른 동작을 보이는 것입니다.