sendto 폴더에서 쉘 스크립트를 사용할 수 있습니까?


9

SendTo폴더 에서 bash 쉘 스크립트를 사용하고 싶습니다 . 배치 또는 exe에 대한 바로 가기를 SendTo폴더에 넣으면 셸 Send To컨텍스트 하위 메뉴에 표시되지만 바로 가기가 셸 스크립트를 가리키면 표시되지 않습니다.

내가 테스트하는 OS는 Win7 Home Premium SP1입니다. 확장명은 .shMinGW 's bash.exe와 (과) 관련되었습니다.

내 쉘 스크립트는 .sh확장 기능을 가지고 .sh있으며이 유틸리티를 사용하여 확장 프로그램의 연결을 해제하려고 시도했지만 (MinGW는 초기에 설정했지만 작동하지 않았다고 생각합니다) 다음을 사용하여 bash에 다시 연결하려고했습니다.

ftype ShellScript=c:\MinGW\msys\1.0\bin\bash.exe -c "'%1' %2"
assoc .sh=ShellScript

관리자 cmd 쉘에서. 명령 프롬프트와 Explorer 셸 (두 번 클릭을 통해)에서 작동하지만 Send To메뉴에 표시 되지 않으며 스크립트 상단의 파일을 직접 드래그하여 매개 변수를 허용하지 않습니다.

내가 어떻게 할 것인지 아는 사람 있습니까?


1
쉘 스크립트 바로 가기를 두 번 클릭하면 탐색기에서 bash 쉘 스크립트를 실행합니까? 쉘 스크립트 또는 쉘 스크립트에 대한 단축키는 쉘 스크립트로 매개 변수화되어 있습니까?
베르너 헨즈

스크립트의 파일 확장자는 무엇입니까? 해당 유형에 대한 파일 유형 연결을 설정 했습니까? 창에 뱅 라인이 있으면 처리 할 수 ​​없습니다. 어떤 bash-for-windows를 사용하고 있습니까?
Frank Thomas

@ FrankThomas : 질문에 요청한 추가 정보를 추가했습니다.
Adrian

@WernerHenze : 링크를 통해 스크립트로 파일을 드래그하면 빨간색 원이 표시됩니다. 스크립트 위에 직접 넣으려고해도 작동하지 않으므로 (예 :) Move to *dir*두 번 클릭하면 실행되지만 어떤 이유로 매개 변수를 사용하지 않는다고 생각합니다. 이것이 왜 그렇게 될지 아십니까?
Adrian

Werner Henze의 두 번째 질문에 대한 답을 찾지 못했기 때문에 비슷한 방향으로 : c:\MinGW\msys\1.0\bin\bash.exe -c C:\Path\To\Your\Script.sh에서 바로 가기의 대상 으로 사용하려고 했습니까 SendTo?
mpy

답변:


4

그러면 스크립트로 끌어서 놓기를 사용할 수 있습니다. 그중 하나를 SendTo 폴더에 넣고 나중에 사용할 수 있습니다.

레지스트리 내보내기 :

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\ShellFile]

[HKEY_CLASSES_ROOT\ShellFile\Shell]

[HKEY_CLASSES_ROOT\ShellFile\Shell\Open]

[HKEY_CLASSES_ROOT\ShellFile\Shell\Open\Command]
@=hex(2):43,00,3a,00,5c,00,70,00,61,00,74,00,68,00,5f,00,65,00,78,00,74,00,5c,\
  00,62,00,61,00,73,00,68,00,2e,00,65,00,78,00,65,00,20,00,2d,00,63,00,20,00,\
  22,00,73,00,6f,00,75,00,72,00,63,00,65,00,20,00,24,00,30,00,3b,00,72,00,65,\
  00,61,00,64,00,22,00,20,00,25,00,31,00,20,00,25,00,2a,00,00,00

[HKEY_CLASSES_ROOT\ShellFile\ShellEx]

[HKEY_CLASSES_ROOT\ShellFile\ShellEx\DropHandler]
@="{86C86720-42A0-1069-A2E8-08002B30309D}"

실제로 16 진 부분 "C:\cygwin\bin\bash.exe -c "source $0;read" %1 %*"은 내보내기에서 인코딩되는 부분 입니다.

read테스트 후 애프터 를 제거하고 싶을 수도 있으므로 열린 창을 떠나지 않고 작업을 수행하는 스크립트를 작성할 수 있습니다. 단일 스크립트에 필요한 경우 언제든지 추가하여 끝을 추가 할 수 있습니다.

assoc .ext=ShellFile가져온 후이 기능으로 원하는 파일 확장자를 연결 하려면 사용하십시오 . 이 예제의 DropHandler는 Windows XP 및 Windows 7 (아마도 다른 것)에서도 작동하며 기본적으로 "삭제 된 모든 파일 이름을 인수로 사용하여 명령 실행"을 의미합니다.

echotest.ext기본 기능을 테스트 하려면이를 스크립트 ( ) 로 사용하십시오 .

echo $0 $*;

source다른 쉘의 호출을 제거하고 드래그 앤 드롭에 대한 내 질문에 대답 하기 위해 +1 . 불행히도 그것은 주요 질문이 아니므로 불행히도 현상금을 얻지 못할 것입니다. 하지만 고마워 나는 성공하지 않고 이것을 알아 내려고 노력했다. (Y)
Adrian

이렇게하면 스크립트 매개 변수를 사용하여 bash.exe에 대한 링크를 만드는 대신 SendTo 폴더에서 직접 셸 스크립트를 사용할 수 있습니다. 나는 실제로 이것이 당신의 질문에 대답한다고 생각하지만, 받아 들여진 대답은 해결책을 제공합니다. 그래도 논쟁하지 않을거야 : P
Squeezy

아, 반갑습니다. 감사. 흠, 그때 현상금을 줄 사람이 확실하지 않습니다. :(
Adrian

mpy, 그는 먼저 문제를 해결했습니다. 방금 호기심으로 해결했습니다. 또한 SendTo와 Drag & Drop을 스크립트에 사용하는 것을 멈출 수 없으므로 이것이 내 상입니다!
Squeezy 2016 년

에서 +1도했는데 source, 이것은 정말 좋은 지적입니다. @Adrian : 이제 SU가 현상금을 너무 빨리 수여하지 않은 이유를 알고 있습니다. IMHO Squeezy의 답변은 현상금이 필요합니다. 그의 답변이 더 우아하기 때문입니다. 당신이 나쁘다고 느끼면 ;)여전히 내 대답을 받아 들일 수 있습니다 (문제가 해결 되었기 때문에).
mpy

4

다음은 (또는 드래그 앤 드롭을 통해) bash쉘 함수에 인수를 전달하는 방법 SendTo입니다. 예를 들어 내장을 사용했습니다 echo. SendTo다음과 같이 폴더 의 링크 대상을 설정하십시오 .

C:\cygwin\bin\bash.exe -c "echo Argument: $0; read"

여기에 $0첫 번째 인수를 의미 한 후 주어진 명령 행 A) 는 sendto를 조치가 실행되는 파일의 즉 전체 파일 이름. read메시지를 읽을 수 있도록 창을 열어 둡니다. (나는 이것을 cygwin 's로 테스트 bash했지만 mingw bash도 작동해야 한다고 생각 합니다.)

귀하의 경우 목표는

c:\MinGW\msys\1.0\bin\bash.exe -c "/path/to/your/script.sh $0; read"

이제 스크립트가 파일 이름을 처리 할 수 ​​있습니다. 그러나 파일 이름은 첫 번째 인수 로 스크립트에 전달 되므로 스크립트 내에서 파일 이름은으로 참조됩니다$1 .


마지막으로 여기에 요약으로 두 스크린 샷이 있습니다.

여기에 이미지 설명을 입력하십시오


여기에 이미지 설명을 입력하십시오


a) 당신은 인용했다 man bash:

-c string-c 옵션이 있으면 문자열에서 명령을 읽습니다. 문자열 뒤에 인수가있는 경우 $ 0부터 위치 매개 변수에 지정됩니다.

이를 이해하려면 다음 대상 라인을 사용하십시오.

C:\cygwin\bin\bash.exe -c "echo This is $0; read" Foo Bar Baz

인쇄 This is Foo하는 동안

C:\cygwin\bin\bash.exe -c "echo This is $2; read" Foo Bar Baz

인쇄 This is Baz합니다. 따라서 "문자열"은 아포스트로피 사이의 모든 Foo Bar Baz것이며 인수입니다.


1
아아, 그것이 바로 그 의미입니다. 이제 말이 되네요 감사합니다. 그렇게하자마자 현상금을 수여합니다. (나는 몇 가지 이유에 대한 11시간에서 그것을 할 수 있다고 말한다 어깨를 으쓱 )
아드리안

0

Windows가 .sh 파일에 대한 링크를 거부하면 .sh 스크립트를 호출하는 .bat 파일을 사용해보십시오.

그래도 작동하지 않으면 .bat를 .exe로 컴파일 할 수도 있습니다.
빠른 구글 발견 :

배치 컴파일러
Bat-To-Exe


프록시 박쥐 또는 exe를 사용할 수 있다는 것을 알고 있습니다. 그런 프록시없이 할 수 있는지 알고 싶습니다.
Adrian

0

이 업데이트 된 버전의 REG 파일을 사용해보십시오 (64 비트 Windows 7을 사용 하고 32 비트 Win7, Vista 또는 XP를 사용 System32하는 SysWOW64경우 대신 사용 ).

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\ShellFile]
@="Shell Script"

[HKEY_CLASSES_ROOT\ShellFile\DefaultIcon]
@="C:Windows\\SysWOW64\\imageres.dll,-68"

[HKEY_CLASSES_ROOT\ShellFile\shell]

[HKEY_CLASSES_ROOT\ShellFile\shell\edit]

[HKEY_CLASSES_ROOT\ShellFile\shell\edit\command]
@="C:\\Windows\\SysWOW64\\NOTEPAD.EXE %1"

[HKEY_CLASSES_ROOT\ShellFile\shell\open]
"EditFlags"=hex:00,00,00,00

[HKEY_CLASSES_ROOT\ShellFile\shell\open\command]
@="C:\\MinGW\\msys\\1.0\\bin\\bash.exe -c \"source $0;\" \"%1 %*\""

[HKEY_CLASSES_ROOT\ShellFile\shell\print]

[HKEY_CLASSES_ROOT\ShellFile\shell\print\command]
@="C:\\Windows\\SysWOW64\\NOTEPAD.EXE /p %1"

[HKEY_CLASSES_ROOT\ShellFile\shell\runas]
"HasLUAShield"=""

[HKEY_CLASSES_ROOT\ShellFile\shell\runas\command]
@="C:\\MinGW\\msys\\1.0\\bin\\bash.exe -c \"source $0;\" \"%1 %*\""

[HKEY_CLASSES_ROOT\ShellFile\shell\runasuser]
@="@shell32.dll,-50944"
"Extended"=""
"SuppressionPolicyEx"="{F211AA05-D4DF-4370-A2A0-9F19C09756A7}"

[HKEY_CLASSES_ROOT\ShellFile\shell\runasuser\command]
"DelegatExecute"="{ea72d00e-4960-42fa-ba92-7792a7944c1d}"

[HKEY_CLASSES_ROOT\ShellFile\ShellEx]

[HKEY_CLASSES_ROOT\ShellFile\ShellEx\DropHandler]
@="{86C86720-42A0-1069-A2E8-08002B30309D}"

이렇게하면 .bat 파일과 마찬가지로 셸 스크립트를 관리자 권한으로 실행할 수도 있습니다. 즉, Windows Vista 및 Windows 7 또는 8을 사용할 때 모든 셸 스크립트를 UAC와 호환되게합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.