Como executar o arquivo .sh no Windows?


67

Quando estou tentando executar um arquivo (name.sh) na linha de comando pelo comando ./name.sh, estou recebendo o erro de que:

"." não é reconhecido como um comando interno ou externo, arquivo operável ou em lote

por favor me ajude a executar o arquivo .sh

Respostas:


74

Você está no Windows CMD.EXE (na mensagem de erro). Ele usa uma sintaxe diferente para executar comandos. Você precisará usar sh name.sh, supondo que você tenha o Cygwin ou similar instalado.

Para esclarecer, o Windows não possui um utilitário interno para suportar arquivos .sh. Para executar isso, você precisará instalar uma ferramenta de terceiros como o Cygwin .


7
Você também não pode apenas instalar o Git no Windows? Parece que isso adiciona suporte para scripts de shell, mesmo que esses scripts não estejam executando tarefas relacionadas ao Git.
DaveTheMinion

2
@DavidB Sim, isso funciona se você colocar C: \ Arquivos de Programas (x86) \ Git \ bin (ou o que quer que esteja no seu computador) no seu PATH, porque o Git coloca todos os tipos de ferramentas úteis lá, incluindo sh.exe
Sumyrda

11
@DavidB Sim, Git Bash sabe o que fazer com isso, correto!
Legends

13

Você está tentando executar um comando do Linux no prompt de comando do Windows.

No Linux, a barra é um separador de caminho. No Windows, a barra invertida é um separador de caminho e a barra invertida geralmente indica um argumento.

Portanto, o Windows pensa que você está tentando executar um comando chamado "." e analisando o argumento "/name.sh". A convenção correta seria ". \ Name.sh". Além disso, o Windows pesquisará automaticamente o diretório atual em busca do seu comando, para que você possa digitar "name.sh".

O próximo problema que você enfrentará é que o Windows não sabe o que é um script sh, novamente isso é uma coisa do Linux. Você pode resolver isso instalando o Cygwin se realmente quiser ou precisar executar um script sh.

No entanto, a julgar por um de seus comentários anteriores, você também pode renomear o script para name.bat e excluir a linha "#! / Bin / sh". Agora você tem um arquivo em lotes que o Windows deve entender. Você pode ler mais sobre arquivos em lote aqui .


12

Como alternativa, você pode mudar para o lado sombrio e instalar o Linux. No prompt:

sh runide.sh

ou

sudo sh runide.sh

Seu programa será executado e você também terá um sistema melhor.


15
É como dizer: "Apenas fique rico e pague a alguém para fazer isso por você"
Funkodebat 16/09/2015

7

Melhor solução na minha opinião:

  • Baixe e instale o .git para Windows

  • Clique com o botão direito na área de trabalho e diga "git bash here"

  • Execute seu script como no unix

  • Feito!

Cuidado: Muitos comandos não funcionam no Windows! Mas ainda assim, muitas coisas básicas funcionarão.

Se você precisar desse script regularmente, poderá criar um atalho (na área de trabalho, por exemplo):

  • Crie um atalho para mintty.exena sua área de trabalho

  • Edite as propriedades do atalho e altere o destino (mantenha o caminho):

  • C:\Program Files\Git\usr\bin\mintty.exe" -h always /bin/bash -l -e 'D:\folder\script.sh'


Isso não funciona. Quando executo tokens @FOR / f "= *"% i IN ('docker-machine env --shell cmd default') DO @% i. Recebo token inesperado (
Steve Tomlin

5

Você está tentando dirigir seu carro com suco de laranja em vez de gasolina. O Windows compartilha comandos semelhantes armazenados em arquivos .bat ou .cmd com scripts de shell Unix / Linux / zOS Unix Subsystem / * ix, pois essas duas famílias de sistemas operacionais compartilham um ancestral comum das máquinas DEC PDP-x.

Se você deseja gratificação instantânea, precisará instalar um ambiente que forneça um programa "sh.exe" ou "csh.exe" ou "bash.exe" (tsh.exe alguém?)

Como alternativa, se você conhece muito bem os comandos de script do Unix e conhece os comandos de arquivo .cmd e .bat do Windows, muito bem, pode converter o arquivo .sh em um arquivo .bat ou .cmd. Mesmo assim, muitas vezes você encontrará mais programas no estilo Unix que não têm equivalente no Windows - grep, sed, vi, emacs, etc. Portanto, a chamada para instalar o CygWin (não minimalista) - apenas para obter o shell e o Unix Ferramentas. Coloque-o em uma unidade flash, para essas ocasiões especiais.


3

Alguém disse algo sobre o MS-DOS usando /comandos e \caminhos. Isso é um pouco enganador. Veja o meu exemplo:

C:\myfoo\foo\>cd../.. 
C:\myfoo\foo\>cd..\..

Não tem diferença de efeito. Sim, não é verdade para todas as operações - a resposta real é simplesmente Não , ou sem Cygwin ou SSHD você não pode.

Eu só sei porque eu estupidamente passado meio dia tentando descobrir o que if then fie eval, execfazer com -Djava.somethingquando chamado.



1

Encontrei uma solução diferente e fácil, chamada UnixUtil .

Faça o download e descompacte-o na unidade C :. Defina a variável de ambiente pathpara incluir C:\UnixUtils\usr\local\wbin.

Isso é importante. NÃO defina o caminho paraC:\UnixUtils\bin



1

Este é um tópico antigo, mas para aqueles que executam o Windows 10. Basta abrir os recursos do Windows no painel de controle 'Ativar ou desativar os recursos do Windows'

Escolha o recurso 'Windows Subsystem for Linux'. Após a instalação, você possui o 'Bash' e ainda pode configurar servidores Linux nativos no bash. E, claro, o comando sh, dentro do bash, também funciona.


0

É possível que o problema esteja realmente dentro do arquivo name.sh- você está tentando usar o .comando, mas está tentando executar um tipo de shell (por exemplo, cshacho) no qual esse comando não é válido.

Então: name.shcomeça com o correto #!/bin/sh(se você está realmente tentando executar sh)?


11
sim, ele inicia #! / bin / sh cd D: \ Raghu D: winzip32.exe -min -a -r D: \ p é o conteúdo do arquivo

0

ok, há muito errado com isso - largue o #! / bin / sh e altere a extensão para bat, e pode funcionar com mais algumas correções. Então você pode invocá-lo também pelo nome do arquivo.

A sintaxe de um script shell unix e um arquivo em lotes do Windows não são muito semelhantes. cygwin, ou um monte de mexer com unxutils pode criar algo que funcionaria em ambos, mas, a menos que você esteja absolutamente certo de que o ambiente é sempre o mesmo, não vale a pena a dor de cabeça


drop the #!/bin/sh, and change the extention to bat, and it might work with a few more fixes.O que?! Eu suspeito que você nunca tentou isso ... No Windows, mesmo os recursos mais simples do bash não são suportados ou exigem sintaxe longa.
Camilo Martin

O segundo parágrafo aborda o fato de que provavelmente não funcionará, sem uma quantidade razoável de trabalho.
Journeyman Geek

Bem, você está certo.
Camilo Martin

0

Se você tiver uma caixa do Linux em sua casa (ou trabalho) e conectada à mesma rede, e essa rede estiver segura, isso pode fazer o truque:

  1. Faça um compartilhamento de pastas no Windows (bastante fácil, mas verifique se a rede está protegida contra invasores).
  2. Monte-o no Linux com mount //WinMachine/Share LinuxFolder(IIRC, e requer Samba ).
  3. Usando algo como PuTTY , efetue login remotamente na caixa do Linux.
  4. Execute seu comando na pasta montada.

0

Para executar o script de shell nas janelas. Primeiro use o comando: dos2unix e, em seguida, use o comando normal: sh runide.sh

Isso vai dar certo.


Desculpe, uma pequena correção precisa ser feita. Use o comando: "dos2unix runide.sh" Saída: dos2unix: convertendo o arquivo runide.sh para o formato UNIX e use o seu comando: "sh runide.sh" Isso certamente executará seu shell script. Feliz aprendizagem
Sridhar GV

A questão não era sobre o formato do arquivo, mas sobre a falta de shell no Windows.
Archemar 23/11

0

Embora as respostas existentes aqui estavam corretos no momento, o Windows 10 não agora opcionalmente incluir uma versão modificada do Ubuntu executando um shell bash completa .

Depois de executáveis, os scripts podem ser executados da maneira usual a partir do bash, por exemplo:

chmod +x myscript.sh
./myscript.sh

Se você deseja executar um script diretamente do Windows, crie um atalho no mesmo diretório e defina o 'Target' para algo como:

C:\Windows\System32\bash.exe -c "./myscript.sh"

Se o caminho do seu script for relativo ao local do atalho (como no exemplo acima), verifique se o campo 'Iniciar em' também está em branco.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.