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.