저는 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
실행할 실행 파일을 명시적으로 지정할 수도 있습니다. , , 등 ""
중 하나를 제거하고 추가하면 됩니다 . 이 경우 애플리케이션당 하나의 행이 필요합니다. 예를 들어:excel
winword
powerpnt
AcroRd32.exe
rifle.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