할 수 있는 방법을 연결.sh 파일 Cygwin?
문제
나는 다음과 같를 실행하는 재미난 명령은 Cygwin 더블 클릭하여니다.sh 파일을 사용하고 있습니다.그것은에서 시작해야 하는 파일을 포함하는 디렉토리(예:/cygdrive/c/스크립트/)에서는 상대적인 경로를 작동합니다.사람에게 이것을 작동하는가?
참고:요 기, 고,Cygwin 패키지를 관리하는 윈도우 컨텍스트 메뉴(Bash 프롬프트를 여기에).그것은 있을 수 있습 몇 가지 단서를 해야 합니다.
해결책
Ok,무언가를 발견했는 작동합니다.을 연결하는 배치 파일로 블라디미르는 제안이 작동하지 않지만,bash 인수가 핵심이다.
짧은 달콤한:연관이 명령: "C:\cygwin\bin\bash.exe"-li"%1"%*
긴 버전지 않는 경우에는 방법을 알고:
- 에서 탐색기,도구/폴더 옵션/파일 형식입니다.
- 이미 SH 항목에 대한 비교 스크립트입니다.당신이 하나를 가지고 있지 않다면,클릭 새로운 입력"SH"에서 하나를 만들 수 있습니다.
- SH 확장자 선택,고급을 클릭합니다.
- 선택하"open"행동하고 편집을 클릭합니다(또는 만듭 액션).
- 이것은 명령을 사용: "C:\cygwin\bin\bash.exe"-li"%1"%*.참고 없이 -li, 었 returing"명령을 발견되지 않았습니다."에서 스크립트가 있습니다.
할 수도 있습니다 추가 SH 귀하의 PATHEXT 환경변수:
WinKey+정지/고급/환경 변수를 시스템 변수/PATHEXT
당신의 도움에 대한 감사입니다,여러분!
다른 팁
여기에는 나의 솔루션입니다.그것은 잘 작동을 위해 내*.sh 스크립트 그들이 어디에 있는 디렉토리 계층 구조입니다.나는 cd cygpath dirname 호출하기 전에 bash 에 cygpath.그냥 작동합니다.
assoc .sh=bashscript
ftype bashscript=C:\cygwin\bin\bash.exe --login -i -c 'cd "$(dirname "$(cygpath -u "%1")")"; bash "$(cygpath -u "%1")"'
내가 함께 일한 드라고의 솔루션은 지금 몇 시간 동안 나는 점은 그것으로 하기 때문에 그것 eleminates 을 사용할 필요가"cygpath-u"내 쉘 스크립트가 있습니다.
내가 그 원한을 추가 기능을 가지고 있는 드래그&드롭에 대한 지원.sh 다.bash 파일이 있습니다.후에는 일부 주변의 파고를 썼습니다.박쥐에는 회합한다.sh 다.bash 파일로"bashscript"및 활성화 윈도우 탐색기 드래그&드롭 처리기한다.을 편집 Dragos'명령을 만들 손잡이 1 인수(의 경로를 항목에 떨어 쉘 스크립트).
니다.bat 파일을 대충 다음과 같습니다:
echo Registering .sh and .bash files as "bashscript"...
assoc .sh=bashscript
assoc .bash=bashscript
echo.
echo Setting the run command for the file type "bashscript"...
ftype bashscript=C:\cygwin\bin\bash.exe --login -i -c 'cd "$(dirname "$(cygpath -u "%%1")")"; bash "$(cygpath -u "%%1")" "$(/argshandler.sh "%%2")"'
echo.
echo Activating the drag^&drop capability for "bashscript" files (only 1 dropped item
echo will be passed to the script, multiple items are not supported yet)...
reg add HKEY_CLASSES_ROOT\bashscript\shellex\DropHandler /v "" /t REG_SZ /d "{60254CA5-953B-11CF-8C96-00AA00B8708C}" /f
은"argshandler.sh"스크립트에서 Cygwin 루트 단지 cygpaths 다시 첫 번째 인수 받고 아무것도 전혀 없는 경우(예:는 경우에 당신은 더블 클릭 스크립트 파일):
#!/bin/bash
if [ ! "$1" == "" ]
then
cygpath -u "$1"
fi
모든 이 사전 설정을 아주 잘 지금까지.그러나,여전히 어떤 단점이 있는 것이 해결될:
- Dragos'명령과 내의 유도체 그것은 실패에 올 때는 스크립트에 위치한 UNC 경로,예를 들어,\\myserver\myshare\scriptfile.sh
- 1 떨어졌 항목에 전달하는 것입니다 쉘 스크립트입니다.
여하튼에 관하여,1-떨어지 항목지만,인수를 변경 핸들러 스크립트를 돌려주고 뭔가
"cygpathed-arg1" "cygpathed-arg2" "cygpathed-arg3"
고 변화하는 세터의 드라고 명령하여 같은 뭔가
...; bash "$(cygpath -u "%%1")" $(/argshandler.sh "%%2" "%%3" ... "%%9")'
(주는 것""주변 argshandler.sh 부분 사라)하지 않는 것이 제대로 작동:는 경우의 일부 항목을 끌어 스크립트를 포함하는 빈에서 자신의 경로,말한 경로로 분할됩니다 여러 개의 인수에 공백에도 그들의 각각은 따옴표로 묶...니다.
어떤 명령줄 전문가 그것까지 느끼를 해결하는 하나 또는 둘 이러한 문제를 해결합니까?
이지 않을 연결합니다.sh 파일이 있지만 그것을 얻을 수 있습니다 당신이 무엇을 원합니다.내가 시작하십시오.bat 를 실행하는 배치 파일은 Cygwin bash shell,그 수정처럼 그렇:
$ cat test.bat
@echo off
set MYDIR=C:\scripts
C:\cygwin\bin\bash --login -c "cd $MYDIR && echo 'Now in' `pwd`; sleep 15"
는 장난감 스크립트나 수정할 수 있습니다 전화를 재동기화 또는 전화로 별도의 쉘 스크립트입니다.내가 인정하는 것이 좋지 못한 경우가들은 디렉터 하드 코딩이 가능합니다.가 probaby 는 방식으로 그것을 얻을 자동으로 설정합니다.
그 때 내가 만들어집니다.bat 파일에서 bash 쉘에서 Cygwin,나는 눈치가 실제로"chmod+x 테스트입니다.bat"기 전에 나는 그것을 실행할 수 있는 더블 클릭합니다.나는 그것이 설정 NTFS 권한이 있습니다.지 않을 할 필요가 있는 경우에 당신은 단지 사용됩니다.
이것은 명령을 사용:
"C:\cygwin\bin\mintty.exe" -w max -h always -t "%1" -e /bin/bash -li -c 'cd "$(dirname "$(cygpath -u "%1")")" && bash "$(cygpath -u "%1")"'
그것을 실행에 mintty,최대로 설정하고,창의 제목하는 스크립트되고 실행(Windows 경로)변경,디렉터리 스크립트를 실행하고 유지한 후 그것은 완료됩니다.
또한,이것은 제목을 설정하 cygwin 경로를 스크립트:
"C:\cygwin\bin\mintty.exe" -w max -h always -t "%1" -e /bin/bash -li -c 'printf "\033]0;$(cygpath -u "%1")\007" && cd "$(dirname "$(cygpath -u "%1")")" && bash "$(cygpath -u "%1")"'
배치는 스크립트를 설정하는 협회를 위해 당신:
Windows 경로에 제목:
@echo off
assoc .sh=shellscript
ftype shellscript="C:\cygwin\bin\mintty.exe" -w max -h always -t "%%1" -e /bin/bash -li -c 'cd "$(dirname "$(cygpath -u "%%1")")" ^&^& bash "$(cygpath -u "%%1")"'
pause
고 cygwin 경로에 제목:
@echo off
assoc .sh=shellscript
ftype shellscript="C:\cygwin\bin\mintty.exe" -w max -h always -t "%%1" -e /bin/bash -li -c 'printf "\033]0;$(cygpath -u "%%1")\007" ^&^& cd "$(dirname "$(cygpath -u "%%1")")" ^&^& bash "$(cygpath -u "%%1")"'
pause
할 수 있어야 합니다.sh 파일하여\CYGWIN\usr\bin\bash.exe.스크립트를 변경해야 자신의 작업 디렉터리에 저는 고집 제안 같은 것이에서 최고:
cd `dirname "$0"`
Windows Registry Editor Version 5.00
;File:ConfigureShToBeRunUnderExplorer.reg v:1.0 docs at the end
[HKEY_CLASSES_ROOT\Applications\bash.exe]
[HKEY_CLASSES_ROOT\Applications\bash.exe\shell]
[HKEY_CLASSES_ROOT\Applications\bash.exe\shell\open]
[HKEY_CLASSES_ROOT\Applications\bash.exe\shell\open\command]
@="C:\\cygwin\\bin\\bash.exe -li \"%1\" %*"
; This is a simple registry file to automate the execution of sh via cygwin on windows 7, might work on other Windows versions ... not tested
; you could add this setting by issueing the following command: reg import ConfigureShToBeRunUnderExplorer.reg
; Note the path of your bash.exe
; Note that you still have to add the .sh to your %PATHTEXT%
; usage: double - click the file or reg import file
는 한 다른 장소입니다.내가 무엇을 마련하기 위해 관리는,먼저 선택 C:\cygwin64\bin\mintty.exe
윈도우에서"열고..."대화
후 레지스트리를 편집하고의 가치
[Computer\HKEY_CLASSES_ROOT\Applications\mintty.exe\shell\open\command]
하여,
C:\cygwin64\bin\mintty.exe -t "%1" /bin/bash -l -i -c "v1=\"$(cygpath -u \"%0\" -a)\" && v2=\"$(dirname \"$v1\")\" && cd \"$v2\" ; exec bash \"%1\" %*"
하나 작동하는 솔루션을 만드는 것입 .bat
파일이 열리는 cygwin 고 스크립트를 실행합니다.
스크립트를 실행하는 스크립트 go.sh
에 위치한 나의 홈디렉토리:
@echo off
C:
chdir C:\cygwin\bin
bash --login -i ./go.sh
나는 그냥 성가시게 하지 않았다.나는 관련입니다.sh 파일을 크림슨 편집기(기 때문가가 많은 시간을 보내는 작업을 버그로 나가 실제적으로 그들을 실행).지금의 사정을 받고"오른쪽으로 열기/편집하는"조합하여 작업에서 파일 형식니다.면 내가 무엇을 알고 있었 DDE 코드 진홍집,사용되는 것을 쉽게 할;이 게시물 수 없었어 그것을 찾기 위해,그러나입니다.
이를 생각 나게 내 맥 일(1993-2008)사용할 때 나는 시도하고 검사 프로그램용보다 더 많은 초보적인 AppleScript scriptability.
BZT
내가 사용하는 PuttyCyg(멋진 퍼티에서 Cygwin window)여기에 그것을 얻는 방법 모든 것:
을 만들 배치는 스크립트,예를 들어,.내 컴퓨터에서 내가 사용하는
C:\Dev\scripts\cygbashrun.bat
내용
SET CYGWIN=nodosfilewarning
C:\Cygwin\bin\putty.exe -cygterm /bin/bash.exe %1
분명히 적응을 포함한 경로의 설치하의 PuttyCyg.
그런 다음에서 Windows 파일 탐색기의 도구로 이동 폴더 옵션이 파일 유형
를 만들".sh"항목이 없는 경우에는 이미(또는.bash 에 따라 당신이 좋아하는 스크립트가)..다음 고급..
[선택적인 단계]아이콘을 선택하십시오에서 아이콘을 설치
다음:
- 새로운..
- Action=실행 Bashscript..
- 응용 프로그램을 사용하여 이 작업을 수행=C:\Dev\scripts\cygbashrun.bat "%1"
일시:O)
개발했다.박쥐에서 스크립트는 내 자신의(지에서 유래의 답변)을 연결하는 파일 유형(예를 들어,*.cygwin)를 엽니다.bat,다음과 같다:
===파일을 실행 스크립트와 함께--Cygwin-in-동 dir.bat===
@echo off
REM Info: A script created by Johnny Wong. (last modified on 2014-7-15)
REM It is used to pass a file argument to run a bash script file. The current directory is setting to the path of the script file for convenience.
REM Could be copied to C:\cygwin; and then you manually associate .cygwin file extension to open with this .bat file.
set CYGWIN=nodosfilewarning
C:\cygwin\bin\bash --login -i -c 'cd "`dirname "%~1"`"; exec bash "%~1" %2 %3 %4 %5 %6 %7 %8 %9'
REM finally pause the script (press any key to continue) to keep the window to see result
pause
===파일을 실행 스크립트와 함께--Cygwin-in-동 dir.bat===
세부사항 설명에 사용되는 구문에(있을 경우 당신이 관심이 있다):
- %1"..."인용하는 경우에는 관련 파일을 엽니다.bat.에 대한 파일을 드래그 앤 드롭습니다.bat,그것은"..."인용하는 경우에만 파일의 경로는 공간이 있습니다.
- %~1 같%1 주변으로 큰 따옴표를 제거되어,그들이 존재하는 경우
- 을 제거하 주변의 더블에서 따옴표%p%,용
for %%a in (%p%) do set p=%%~a
- 를 사용해야 합니다
"%~1"
을 강제로 스크립트 파일의 경로를 따옴표는 폴더 구분'\'(1)에 의해 제거되지 않을 것이 강타할 때 치료를 받으로 탈출 자입니다.그렇지 않으면,그것은 작동하지 않는 경우 파일을 드래그 앤 드롭이 없는 공간에서의 경로이다.bat. - "exec bash"될 수 있습니다 그냥"bash",전자는 저장을위한 리소스에 대한 하나 더 bash 과정입니다.
숙:)
보 assoc 및 ftype 명령에서는 dos 상자입니다.여기에 예습니다.jpg 에서 내 컴퓨터
c:\>assoc .jpg
.jpg=jpegfile
c:\>ftype jpegfile
jpegfile="C:\Program Files\Common Files\Microsoft Shared\PhotoEd\PHOTOED.EXE" "%1"
assoc .sh=bashscript
ftype bashscript="c:\cygwin\bin\bash.exe" "%1"
을 변경했는지 확인하십시오 경로를 비난에 ftype
명령하는 일치해야 할 곳 cygwin
설치