Eu gostaria de usar um script shell bash da SendTo
pasta. Quando coloco um atalho em um lote ou exe na SendTo
pasta, ele aparece no Send To
submenu de contexto do shell , mas quando o atalho está apontando para um script de shell, não aparece.
O SO que estou testando é o Win7 Home Premium SP1. A extensão está .sh
associada ao bash.exe do MinGW.
Meu script de shell tem uma .sh
extensão e tentei desassociá-la .sh
(acho que o MinGW o configurou inicialmente, mas não funcionou) usando esse utilitário e tentei reassociá-lo ao bash usando:
ftype ShellScript=c:\MinGW\msys\1.0\bin\bash.exe -c "'%1' %2"
assoc .sh=ShellScript
em um shell de cmd admin. Embora isso funcione em um prompt de comando e no shell do Explorer (via clique duplo), ele não será exibido no Send To
menu e não aceitará um parâmetro arrastando um arquivo diretamente sobre o script.
Alguém sabe como eu faria isso?
Move to *dir*
), então estou pensando que não está recebendo parâmetros por algum motivo, mesmo que seja executado se você clicar duas vezes. Alguma idéia de por que isso seria assim?c:\MinGW\msys\1.0\bin\bash.exe -c C:\Path\To\Your\Script.sh
como alvo do atalhoSendTo
?Respostas:
Isso permitirá arrastar e soltar para qualquer script. Você pode colocar um deles na pasta SendTo e usá-lo posteriormente.
Exportação do Registro:
A parte hexadecimal, na verdade, é a
"C:\cygwin\bin\bash.exe -c "source $0;read" %1 %*"
que é codificada na exportação.Você provavelmente desejará remover o
read
pós-teste, para poder escrever scripts que apenas executem uma tarefa sem deixar uma janela aberta. Se você precisar disso para scripts únicos, sempre poderá adicioná-lo e adicionar seu final.Use
assoc .ext=ShellFile
após a importação para vincular qualquer extensão de arquivo desejada a essa funcionalidade. O DropHandler neste exemplo funciona para Windows XP e Windows 7 (provavelmente outros também) e basicamente significa "executar o comando, com todos os nomes de arquivos descartados como argumentos".Use isso como um script (
echotest.ext
) para testar a funcionalidade básica:fonte
source
eliminação da chamada de outro shell e responder à minha pergunta secundária sobre arrastar e soltar. Infelizmente, essa não é a questão principal, então, infelizmente, você não receberá a recompensa. Mas obrigada. Eu tentei descobrir isso sem sucesso. (Y)source
, este é realmente um bom ponto. @Adrian: Agora você sabe, por que SU não deixou você premiar a recompensa muito rápido. A resposta do IMHO Squeezy merece a recompensa, porque sua resposta é mais elegante; se você se sentir mal com isso,;)
ainda poderá aceitar minha resposta (como também resolveu o seu problema), mas eu também ficaria bem apenas com o voto positivo.Aqui está como passar um argumento para uma
bash
função shell viaSendTo
(ou via arrastar e soltar). Como exemplo, usei o builtinecho
. Defina o destino para o seu link naSendTo
pasta da seguinte maneira:Aqui
$0
está o primeiro argumento após a linha de comando fornecida a) , ou seja, o nome completo do arquivo no qual a ação sendto foi executada.read
mantém a janela aberta, para que você possa ler a mensagem. (Testei isso com o cygwinbash
, mas acho que o mingw tambémbash
deve funcionar.)No seu caso, o alvo deve ser
Agora seu script pode processar o nome do arquivo. Mas observe que o nome do arquivo é passado para o script como o primeiro argumento; portanto, dentro do script, o nome do arquivo é referido como
$1
.Por último, mas não menos importante, aqui estão duas capturas de tela como um resumo:
a) Você citou
man bash
:Para entender isso, use, por exemplo, a seguinte linha de destino:
Isso será impresso
This is Foo
, enquantoirá imprimir
This is Baz
. Portanto, a "string" é tudo entre os apóstrofos eFoo Bar Baz
são os argumentos.fonte
Se o Windows se recusar a vincular a um arquivo .sh, você pode tentar usar um arquivo .bat que invoque o script .sh.
Se isso não funcionar, você também pode tentar compilar o .bat em .exe.
Um rápido google encontrado:
Bat-To-Exe do compilador de lotes
fonte
Experimente esta versão atualizada do arquivo REG (note que eu uso o Windows 7 de 64 bits; use em
System32
vez deSysWOW64
se você tiver o Win7, Vista ou XP de 32 bits):Isso permitirá que seus scripts de shell também sejam executados como Administrador, assim como qualquer arquivo .bat. Em outras palavras, ele torna todos os scripts de shell compatíveis com o UAC ao usar o Windows Vista e o Windows 7 ou 8.
fonte