Execute o arquivo .sh ao clicar duas vezes no Windows com o Cygwin

5

Eu criei um arquivo de script .sh na minha máquina Windows. Eu gostaria de executá-lo em duplo clique. Se eu abrir o Cygwin Terminal e iniciá-lo manualmente com o comando “sh”, ele será executado sem problemas.

Quando associo finais de arquivo .sh com c: \ cygwin \ bin \ sh.exe e clico duas vezes em script.sh, um terminal aparece por um milissegundo e desaparece sem efeito. Eu acho que o problema é que sh.exe precisa ser iniciado assim:

C:\cygwin64\bin\sh.exe --login –i

Mas como eu digo ao Windows para executar arquivos .sh assim?

    
por Rotareti 28.04.2015 / 00:33

4 respostas

6

Você precisa adicionar um parâmetro %1 para que a associação funcione, por exemplo, assim (as cotações são necessárias para trabalhar com caminhos com espaços em branco incorporados):

C:\cygwin64\bin\sh.exe -li  "%1"

A pergunta foi feita antes em vários lugares; estes podem ser úteis:

A janela será fechada quando o script for concluído, a menos que você faça alguma provisão para isso no script, por exemplo, seguindo isso com o comando read (já que a associação está passando apenas o script como argumento). Aqui estão algumas discussões sobre esse aspecto:

por 28.04.2015 / 00:43
4

Eu estava insatisfeito com as outras respostas encontradas aqui e em outros lugares na Internet, então passei uma quantidade considerável de tempo trabalhando em como fazer isso corretamente. Aqui está o que eu fiz.

  1. Crie uma chave chamada .sh e defina seu (Default) valor como Shell Script em HKEY_CLASSES_ROOT .
    • Crie uma chave chamada Shell Script em HKEY_CLASSES_ROOT e defina o valor (Default) como Shell Script .
  2. Crie uma chave chamada shell em HKEY_CLASSES_ROOT\Shell Script .
  3. Crie uma chave chamada open em HKEY_CLASSES_ROOT\Shell Script\shell e defina o valor (Default) como Run with Cygwin .
  4. Crie uma chave chamada command em HKEY_CLASSES_ROOT\Shell Script\shell\open e defina o valor (Default) como "C:\cygwin64\bin\mintty.exe" -i /Cygwin-Terminal.ico C:\cygwin64\bin\bash.exe -l -c "cd $(dirname \"$(cygpath -u \"%1\")\") ; $(cygpath -u \"%1\") ; exec bash" (altere C:\cygwin64\ para C:\cygwin\ se você estiver usando a versão de 32 bits).

Agora você pode apenas clicar duas vezes no seu arquivo .sh e ele será executado conforme o esperado.

Bônus:

  1. Crie uma chave chamada DefaultIcon em HKEY_CLASSES_ROOT\Shell Script e defina o valor (Default) como %SystemRoot%\System32\imageres.dll,-68 . Isso aplicará o ícone do arquivo Batch padrão aos seus scripts de shell.

Eu também criei um arquivo de patch de registro (Salvar como Run With Cygwin.reg ):

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.sh]
@="Shell Script"

[HKEY_CLASSES_ROOT\Shell Script]
@="Shell Script"

[HKEY_CLASSES_ROOT\Shell Script\DefaultIcon]
@="%SystemRoot%\System32\imageres.dll,-68"

[HKEY_CLASSES_ROOT\Shell Script\shell]

[HKEY_CLASSES_ROOT\Shell Script\shell\open]
@="Run with Cygwin"

[HKEY_CLASSES_ROOT\Shell Script\shell\open\command]
@="\"C:\cygwin64\bin\mintty.exe\" -i /Cygwin-Terminal.ico C:\cygwin64\bin\bash.exe -l -c \"cd $(dirname \\"$(cygpath -u \\"%1\\")\\") ; $(cygpath -u \\"%1\\") ; exec bash\""
    
por 12.01.2016 / 19:16
0

Coloque o seguinte em um arquivo de lote e selecione-o para "Abre com" para arquivos ".sh":

@echo off
C:\cygwin\bin\bash.exe -lc "cd ""%cd%""; ""$(cygpath -u "%1")"""

O 'cd ""% cd% "";' parte garante que o script de shell sempre será iniciado no mesmo diretório do qual ele foi chamado, mesmo que seu perfil Bash tente iniciar em seu diretório inicial. As múltiplas camadas de aspas duplas são necessárias para escapar das barras invertidas e permitir espaços nos nomes dos caminhos.

Uma alternativa para a opção de login (-l), para garantir que comandos não incorporados estejam disponíveis, é adicionar o diretório bin ao seu caminho:

@echo off
set path=%path%;C:\cygwin\bin
bash -c """$(cygpath -u "%1")"""
    
por 10.10.2015 / 08:05
0

No final, descobri que esta é a melhor solução na minha máquina com Windows 7.

1. Vá para "Control Panel" > "Default Programs" > "Set Associations" e associe o arquivo .sh terminando com c:\cygwin\bash.exe

2.Abra regedit e vá para HKEY_CLASSES_ROOT\Applications\bash.exe\shell\open\command e altere para "C:\cygwin\bin\bash.exe" -li "%1"

Encontrado aqui link (comentário de Matthias)

    
por 29.04.2015 / 17:35