Linux용 Windows 하위 시스템에서 Ranger를 사용한 파일 열기 동작

Linux용 Windows 하위 시스템에서 Ranger를 사용한 파일 열기 동작

저는 Linux용 Microsoft Windows([버전 10.0.15063]) 하위 시스템을 사용하고 있는데 Bash에서 Ranger 파일 관리자를 사용하여 파일을 열 때 예기치 않은 동작이 관찰되었습니다.

예를 들어 Sublime Text 3에서 .txt 확장자를 열려면 ~/.config/rifle.conf를 설정했습니다.

ext txt = "/mnt/c/Program Files/Sublime Text 3/sublime_text.exe" "$@"

Enter를 눌러 데이터가 포함된 기존 텍스트 파일을 열면 Sublime이 파일을 열지만 Sublime에 표시된 파일에는 실제 텍스트/데이터가 없습니다. 파일을 닫고 Windows 파일 탐색기를 사용하여 열면 텍스트가 바로 거기에 있습니다.

흥미롭게도 Sublime이 보는 경로는 "C\mnt\c\path\to\my\file.txt"입니다.

이것은 Windows에서 /mnt를 볼 수 없는 문제입니까? WSL에서 Ranger를 내 파일 관리자로 사용하고 싶습니다. 이 동작을 본 사람이 있고 수정 사항을 발견한 사람이 있습니까? 다들 감사 해요!

답변1

laktak이 설명했듯이 WSL은 파일 경로를 Unix 경로에서 Windows 경로로 변환하지 않습니다. 방금 하나만 썼어요요점제가 이 문제를 처리한 방법은 아래와 같습니다.

Windows 10 Fall Creators Update가 설치된 WSL이 있는지 확인하세요. Ranger는 rifle파일 처리기 로 사용되며 해당 구성 파일이 필요합니다 rifle.conf. 파일이 없으면(에 있어야 함 ~/.config/ranger/rifle.conf) 명령을 실행 ranger --copy-config=rifle한 다음 결과 파일을 편집합니다.

cmd.exe /C start "" <file>Ranger에서 Windows 응용 프로그램을 실행하려면 Fall Creators Update 이후에 실행되는 Ranger를 사용합니다 . sed번역 경로를 사용하여 경로 문제를 해결 하겠습니다 .

파일에 다음 코드를 추가하면 rifle.conf원하는 파일 확장자로 Windows 응용 프로그램을 실행할 수 있습니다.

ext docx?|xlsx?|pptx?|pdf = echo "$@" | sed -e 's;/mnt/\(.\);\1:;' -e 's/.*/"&"/' -e 's:/:\\:g' | xargs cmd.exe /C start ""

start파일 확장자와 연결된 응용 프로그램을 암시적으로 실행할 수 있어야 하지만 어떤 이유로 작동하지 않는 경우 start실행할 실행 파일을 명시적으로 지정할 수도 있습니다. , , 등 ""중 하나를 제거하고 추가하면 됩니다 . 이 경우 애플리케이션당 하나의 행이 필요합니다. 예를 들어:excelwinwordpowerpntAcroRd32.exerifle.conf

ext docx? = echo "$@" | sed -e 's;/mnt/\(.\);\1:;' -e 's/.*/"&"/' -e 's:/:\\:g' | xargs cmd.exe /C start winword
ext xlsx? = echo "$@" | sed -e 's;/mnt/\(.\);\1:;' -e 's/.*/"&"/' -e 's:/:\\:g' | xargs cmd.exe /C start excel

추가 독서

답변2

WSL은 절대 경로 변환 AFAIK를 처리하지 않습니다.

당신은 할 수

  • 경로를 직접 번역하세요(예: bash 기능을 사용하여 /mnt/c/대체 c:\).
  • 또는 상대 경로를 사용하십시오

답변3

Linux 경로를 /mnt/c/Users/myusername/Desktop
Windows 경로로 변환하려면 C:\Users\myusername\Desktop
다음 세 단계를 수행해야 합니다.

1 단계:경로의 시작과 끝에 큰따옴표를 추가합니다(공백에 필요).

sed -e 's;.*;"&";'
#   s … substitute
#   ; … delimiter character (can by any character)
#   .* … any character `.` occurring any number of times `*` will be replaced by:
#   " … at the beginning and " at the end.

2 단계:/mnt/c/다음으로 교체 C::

sed -e 's;/mnt/c/;C:;'
#   s … substitute field 1 `/mnt/c/` by field 2 `C:`

3단계:모든 슬래시를 /백슬래시로 바꿉니다 \.

sed -e 's;/;\\;g'
#   s … substitute field 1 `/` by field 2 `\`
#   Note that there is a second `\` for escaping.

Linux 터미널에서 세 부분을 모두 테스트합니다.

echo '/mnt/c/Users/myusername/Desktop' | sed -e 's;.*;"&";' -e 's;/mnt/c/;C:;' -e 's;/;\\;g'
"C:Users\myusername\Desktop"

레인저스는 소총을 파일 오프너로 사용합니다. 내 기본 Linux 배포판에서는 rifle.conf기본 응용 프로그램으로 모든 파일 형식을 실행하는 한 줄만 포함합니다.

else X, flag f = xdg-open "$@"

WSL인 경우 다음과 같습니다.

cat << EOT >> ~/.config/ranger/rifle.conf
else X, flag f = echo "\$@" | sed -e 's;.*;"&";' -e 's;/mnt/c/;C:;' -e 's;/;\\\;g' | xargs cmd.exe /C start ""
EOT

관련 정보