Cygwin 프로그램을 사용하여 Windows에서 직접 문서 열기

Cygwin 프로그램을 사용하여 Windows에서 직접 문서 열기

Windows 10을 사용하여 문서를 열 수 있습니까?"사용 가능"다음과 같은 Cygwin과 함께 제공되는 프로그램의 기능자투라?

다음으로 열기

이것은 Cygwin 프로그램과 함께 제공됩니다.

첫 시도:Windows에서 직접 Cygwin 프로그램, 즉 실행 파일 C:\cygwin64\bin(표준 설치 경로인 경우)을 사용해 보십시오.

에도 불구하고"사용 가능"문제는 가장 간단한 프로그램을 제외하고(먼저 로그인 쉘을 실행하지 않고!) Cygwin 프로그램을 직접 여는 것이 일반적으로 제대로 작동하지 않는다는 것입니다.

따라서 Cygwin X 서버를 시작하고 Windows 시스템 환경 변수를 설정합니다 DISPLAY(이것은통과하여) :0.0사용"사용 가능"C:\book.pdfZathura를 선택하여 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.pathCygwin 홈 디렉터리에 파일이 생성되고 "사이그윈화"문서에 대한 경로가 기록되어 있습니다. 우리는 꽤 가깝습니다.

하지만 아쉽게도"사용 가능"이것은 작동하지 않습니다. 아무 일도 일어나지 않습니다.

그래서 사용하는 방법"사용 가능"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

여전히 문제를 일으키는 이상한 파일 이름이 있을 수 있습니다. 그러나 최소한 공백, 괄호 및 대괄호를 포함하는 모든 일반 파일 이름에서는 작동합니다.

관련 정보