Windows 10을 사용하여 문서를 열 수 있습니까?"사용 가능"다음과 같은 Cygwin과 함께 제공되는 프로그램의 기능자투라?
이것은 Cygwin 프로그램과 함께 제공됩니다.
첫 시도:Windows에서 직접 Cygwin 프로그램, 즉 실행 파일 C:\cygwin64\bin
(표준 설치 경로인 경우)을 사용해 보십시오.
에도 불구하고"사용 가능"문제는 가장 간단한 프로그램을 제외하고(먼저 로그인 쉘을 실행하지 않고!) Cygwin 프로그램을 직접 여는 것이 일반적으로 제대로 작동하지 않는다는 것입니다.
따라서 Cygwin X 서버를 시작하고 Windows 시스템 환경 변수를 설정합니다 DISPLAY
(이것은통과하여) :0.0
사용"사용 가능"C:\book.pdf
Zathura를 선택하여 GUI C:\cygwin64\bin\zathura.exe
창을 엽니다. 하지만 다음과 같은 오류가 발생합니다.
error: Unknown file type: 'cannot open `/cygdrive/c/Windows/system32/C:\book.pdf'
(No such file or directory)'
❓
분명히 여기 경로에 문제가 있습니다.
두 번째 시도:대상과 함께 Windows 바로 가기를 사용하여 문제를 해결하십시오.
C:\cygwin64\bin\bash.exe -l -c 'zathura "`cygpath "$0"`"'
적어도 이것은 Windows 탐색기의 끌어서 놓기에는 작동합니다. 하지만 함께는 아니야"다음으로 열기".
emitpath.lnk
최소한의 예로, 대상을 사용하여 Windows 바로 가기를 만듭니다.
C:\cygwin64\bin\bash.exe -l -c 'echo "`cygpath "$0"`" > out.path'
문서를 바로가기에 끌어다 놓으면 다시 예상대로 작동합니다. out.path
Cygwin 홈 디렉터리에 파일이 생성되고 "사이그윈화"문서에 대한 경로가 기록되어 있습니다. 우리는 꽤 가깝습니다.
하지만 아쉽게도"사용 가능"이것은 작동하지 않습니다. 아무 일도 일어나지 않습니다.
그래서 사용하는 방법"사용 가능"Windows 10에서 Cygwin 프로그램을 사용하시나요?
실행 가능한 래퍼를 만드는 것보다 더 쉬운 방법이 있을 것입니다.
답변1
다음과 같은 배치 파일을 만듭니다.
@echo off
D:
chdir D:\cygwin64\bin
set A=%1
bash --login -c "/usr/bin/echo $(cygpath $A)"
pause
의 루트 디렉터리에 Cygwin
하나가 있어야 합니다 Cygwin.bat
. 폴더에
배치 파일에 대한 링크를 넣습니다.SendTo
이제 사진 폴더에서 사진을 보내면 새 CMD 창에 표시됩니다.
/cygdrive/c/Users/Marco/Pictures/img250.jpg
Drücken Sie eine beliebige Taste . . .
마지막은 Press any key
독일어입니다.
여기에서 배치를 수정하여 원하는 cygwin 프로그램을 실행할 수 있습니다.
X 서버를 사용하려는 경우 실행 중에 타이밍 문제가 발생할 수 있으므로 Xwin 서버를 먼저 실행하는 것이 가장 좋습니다.
답변2
matzeri 솔루션의 문제점은 가장 정상적인 파일 이름에서만 작동한다는 것입니다. 파일 이름에 공백이 있어서 깨졌습니다.
C:\book 1.pdf
이것이 열려야 할 문서인 경우 bash 측에서 이스케이프가 올바른 문자열로 끝나기를 원한다는 점을 기억하십시오 . 다음과 같습니다.
"/usr/bin/zathura \"$(cygpath 'C:\book 1.pdf')\""
그러나 Windows는 두 가지 방법으로 문서 경로를 배치 스크립트에 매개변수로 전달합니다.
- "사용 가능":언제나큰따옴표.
- "끌어서 놓기": 오직때때로큰따옴표(공백이 있는 경우)
배치 언어의 이스케이프 규칙은 매우 난해하므로 문자열을 작성하기 위해 많은 중간 변수를 사용하는 것이 가장 좋습니다.
우리는 다음을 사용할 수 있습니다:
^
Escaped"
하지만 따옴표가 없는 문자열에 대해서만 참조하세요.여기!set x=%x:"=%
"
변수의 문자열에 있는 모든 항목을 대체합니다x
.작은따옴표
'
는 일반 문자이므로 이스케이프할 필요가 없습니다.
따라서 다음 배치 파일이 작업을 수행합니다.
@echo off
C:
cd C:\cygwin64\bin
set pdfpath=%1
set pdfpath=%pdfpath:"=%
set cygpart=$(cygpath '%pdfpath%')
set fullcmd=/usr/bin/zathura \^"%cygpart%\^"
bash -l -c "%fullcmd%"
pause
여전히 문제를 일으키는 이상한 파일 이름이 있을 수 있습니다. 그러나 최소한 공백, 괄호 및 대괄호를 포함하는 모든 일반 파일 이름에서는 작동합니다.