xdg-open이 백분율로 인코딩된 URL을 처리하지 않는다는 것을 알았습니다. 예를 들어 다음 줄은 성공합니다(파일이 존재하는 경우).
xdg-open "/home/sashoalm/Has Spaces.txt"
xdg-open file:///home/sashoalm/NoSpaces.txt
그러나 이것은 실패합니다.
xdg-open file:///home/sashoalm/Has%20Spaces.txt
편집하다:이것은 내 버전의 xdg-utils입니다.
sashoalm@aspire:~$ apt-cache policy xdg-utils
xdg-utils:
Installed: 1.1.0~rc1+git20111210-6+deb7u1
Candidate: 1.1.0~rc1+git20111210-6+deb7u1
Version table:
*** 1.1.0~rc1+git20111210-6+deb7u1 0
500 http://ftp.bg.debian.org/debian/ wheezy/main amd64 Packages
100 /var/lib/dpkg/status
편집 2:추적은 다음과 같습니다.
sashoalm@aspire:~$ bash -x xdg-open file:///home/sashoalm/Has%20Spaces.txt
+ check_common_commands file:///home/sashoalm/Has%20Spaces.txt
+ '[' 1 -gt 0 ']'
+ parm=file:///home/sashoalm/Has%20Spaces.txt
+ shift
+ case "$parm" in
+ '[' 0 -gt 0 ']'
+ '[' -z '' ']'
+ unset XDG_UTILS_DEBUG_LEVEL
+ '[' 0 -lt 1 ']'
+ xdg_redirect_output=' > /dev/null 2> /dev/null'
+ '[' xfile:///home/sashoalm/Has%20Spaces.txt '!=' x ']'
+ url=
+ '[' 1 -gt 0 ']'
+ parm=file:///home/sashoalm/Has%20Spaces.txt
+ shift
+ case "$parm" in
+ '[' -n '' ']'
+ url=file:///home/sashoalm/Has%20Spaces.txt
+ '[' 0 -gt 0 ']'
+ '[' -z file:///home/sashoalm/Has%20Spaces.txt ']'
+ detectDE
+ unset GREP_OPTIONS
+ '[' -n LXDE ']'
+ case "${XDG_CURRENT_DESKTOP}" in
+ DE=lxde
+ '[' xlxde = x ']'
+ '[' xlxde = x ']'
+ '[' xlxde = x ']'
+ '[' xlxde = xgnome ']'
+ '[' xlxde = x ']'
+ DEBUG 2 'Selected DE lxde'
+ '[' -z '' ']'
+ return 0
+ '[' x = x ']'
+ BROWSER=www-browser:links2:elinks:links:lynx:w3m
+ '[' -n :0 ']'
+ BROWSER=x-www-browser:firefox:seamonkey:mozilla:epiphany:konqueror:chromium-browser:google-chrome:www-browser:links2:elinks:links:lynx:w3m
+ case "$DE" in
+ open_lxde file:///home/sashoalm/Has%20Spaces.txt
+ echo file:///home/sashoalm/Has%20Spaces.txt
+ grep -q '^file://'
++ echo file:///home/sashoalm/Has%20Spaces.txt
++ sed 's%^file://%%'
+ local file=/home/sashoalm/Has%20Spaces.txt
+ echo /home/sashoalm/Has%20Spaces.txt
+ grep -q '^/'
+ pcmanfm /home/sashoalm/Has%20Spaces.txt
+ '[' 0 -eq 0 ']'
+ exit_success
+ '[' 0 -gt 0 ']'
+ exit 0
답변1
LXDE 데스크탑 환경을 사용하는 경우 xdg-open은 file://
이 프로그램을 사용하여 URL을 엽니다 pcmanfm
. pcmanfm은 URL이 아닌 일반 경로만 매개변수로 지원하므로 file://
URL의 일부를 제거 하고 pcmanfm
나머지 부분과 함께 호출합니다.
xdg-open
다른 대체는 이루어지지 않으므로 %20
공백으로 변환되지 않습니다. 이것은 버그입니다(데비안에서 이에 대한 버그 보고서를 자유롭게 열어주세요). 수정 사항은 아래에 설명되어 있습니다.
다른 데스크탑 환경의 경우 개방형 프로그램은 file:// URL을 올바르게 지원합니다.
해결책: xdg-open이 필요한 모든 대체를 지원하는 일반 열기 핸들러를 사용하도록 일부 환경 변수를 설정 해제합니다.
XDG_CURRENT_DESKTOP= DESKTOP_SESSION= xdg-open "/home/sashoalm/Has Spaces.txt"
버그 수정: xdg-open 스크립트를 /usr/local/bin에 복사하고(시스템을 업그레이드할 때 덮어쓰지 않도록) 다음 줄을 추가합니다.
file="$(printf "$(echo "$file" | sed -e 's@%\([a-f0-9A-F]\{2\}\)@\\x\1@g')")"
주석 처리된 줄 위의 xdg-open 스크립트로 이동합니다 # handle relative paths
.
버그 수정 2:
또는 간단히 detectDE()
다음으로 바꾸십시오.
detectDE()
{
DE=gnome
}