¿Cómo ejecutar el archivo .sh en Windows?

67

Cuando intento ejecutar un archivo (nombre.sh) en la línea de comando con el comando ./name.sh, recibo el error de que:

"." no se reconoce como un comando interno o externo, archivo operable o por lotes

por favor ayúdame a ejecutar el archivo .sh

Broam
fuente

Respuestas:

74

Estás en Windows CMD.EXE (del mensaje de error). Utiliza una sintaxis diferente para ejecutar comandos. Deberá usarlo sh name.sh, suponiendo que tenga instalado Cygwin o similar.

Para aclarar, Windows no tiene una utilidad incorporada para admitir archivos .sh. Para ejecutarlo, deberá instalar una herramienta de terceros como Cygwin .

Roger Lipscombe
fuente
77
¿No podrías simplemente instalar Git en Windows? Parece que hacerlo agrega soporte para los scripts de shell incluso si esos scripts de shell no realizan tareas relacionadas con Git.
DaveTheMinion
2
@DavidB Sí, eso funciona si coloca C: \ Archivos de programa (x86) \ Git \ bin (o lo que sea que esté en su computadora) en su RUTA, porque Git coloca todo tipo de herramientas útiles, incluido sh.exe
Sumyrda
1
@DavidB Sí, Git Bash sabe qué hacer con él, ¡correcto!
Leyendas
13

Está intentando ejecutar un comando de Linux en el símbolo del sistema de Windows.

En Linux, la barra diagonal es un separador de ruta. En Windows, la barra diagonal inversa es un separador de ruta y la barra diagonal generalmente indica un argumento.

Por lo tanto, Windows cree que está intentando ejecutar un comando llamado "." y analizando el argumento "/name.sh". La convención correcta sería ". \ Name.sh". Además, Windows buscará automáticamente en el directorio actual su comando para que pueda escribir "name.sh".

El siguiente problema que enfrentará es que Windows no sabe qué es un script sh, nuevamente esto es algo de Linux. Puede resolver esto instalando Cygwin si realmente desea o necesita ejecutar un script sh.

Sin embargo, a juzgar por uno de sus comentarios anteriores, podría cambiar el nombre del script a name.bat y eliminar la línea "#! / Bin / sh". Ahora tiene un archivo Batch que Windows debería entender. Puede leer más sobre los archivos por lotes aquí .

Martín Fido
fuente
12

Alternativamente, puede pasar al lado oscuro e instalar Linux. Desde el aviso:

sh runide.sh

o

sudo sh runide.sh

Su programa se ejecutará y también tendrá un mejor sistema.

Steve
fuente
15
Es como decir: "Solo
hazte
7

La mejor solución en mi opinión:

  • Descargue e instale .git para Windows

  • Haga clic derecho en el escritorio y diga "git bash here"

  • Ejecute su script como en unix

  • ¡Hecho!

Precaución: ¡Muchos comandos no funcionarán en Windows! Pero aún así, muchas de las cosas básicas funcionarán.

Si necesita ese script regularmente, puede crear un acceso directo (en su escritorio, por ejemplo):

  • Crea un acceso directo a mintty.exeen tu escritorio

  • Edite las propiedades del acceso directo y cambie el objetivo (mantenga la ruta):

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

Heanz
fuente
Esto no funciona Cuando ejecuto @FOR / f "tokens = *"% i IN ('docker-machine env --shell cmd default') DO @% i. Recibo un token inesperado (
Steve Tomlin,
5

Estás tratando de hacer funcionar tu auto con jugo de naranja en lugar de gasolina. Windows comparte comandos similares almacenados en archivos .bat o .cmd con los scripts de shell Unix / Linux / zOS Unix Subsystem / * ix ya que estas dos familias de sistemas operativos comparten un antepasado común de las máquinas DEC PDP-x.

Si desea una gratificación instantánea, deberá instalar un entorno que proporcione un programa "sh.exe" o "csh.exe" o "bash.exe" (¿alguien tiene tsh.exe?)

Alternativamente, si conoce muy bien los comandos de script Unix y conoce muy bien los comandos de archivo .cmd y .bat de Windows, puede traducir el archivo .sh a un archivo .bat o .cmd. Aun así, a menudo encontrará más programas con estilo Unix que no tienen equivalente en Windows: grep, sed, vi, emacs, etc. Por lo tanto, la llamada para instalar CygWin (no minimalista), solo para obtener el shell y Unix herramientas. Póngalo en una unidad flash, para estas ocasiones especiales.

JM
fuente
3

Alguien dijo algo sobre MS-DOS usando /para comandos y \para rutas. Esto es un poco engañoso. Mira mi ejemplo:

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

No tiene diferencia en efecto. Sí, no es cierto para todas las operaciones: la respuesta real es simplemente No , o sin Cygwin o SSHD no se puede.

Sólo sé porque yo estúpidamente pasé medio día tratando de averiguar qué if then fiy eval, exechacer con -Djava.somethingsu llamado.

grizzleybear123
fuente
2

Usa Github para Windows. Contiene todos los ejecutables del entorno Unix.

https://github-windows.s3.amazonaws.com/GitHubSetup.exe

Nederealm
fuente
1
Más específicamente, instale Git. La única razón por la que instalar Github para Windows contiene un shell Bash es porque viene con Git. :)
ZaLiTHkA
Buena alternativa, gracias, por lo que no es necesario instalar más herramientas. +1
Guilherme Nascimento
1

Encontré una solución diferente y fácil, llamada UnixUtil .

Descargue y descomprímalo en C: unidad. Establezca la variable de entorno pathpara incluir C:\UnixUtils\usr\local\wbin.

Esto es importante. NO establezca la ruta aC:\UnixUtils\bin

prabhanjan deshpande
fuente
1

Para completar, quiero mencionar una nueva característica de "Windows Subsystem for Linux" para Windows 10. Los detalles se describen en http://www.howtogeek.com/249966/how-to-install-and-use-the-linux- bash-shell-on-windows-10 /

Tenga en cuenta que requiere activar el interruptor "Modo desarrollador" y habilitar la opción "Subsistema de Windows para Linux (Beta)".

Por mi parte, descubrí que la instalación de Git para Windows (que estoy usando de todos modos) es suficiente.

Michael Freidgeim
fuente
1

Este es un hilo antiguo pero para aquellos que ejecutan Windows 10. Simplemente abra las funciones de Windows desde el panel de control 'Activar o desactivar las características de Windows'

Elija la función 'Subsistema de Windows para Linux'. Después de la instalación, tiene 'Bash' e incluso puede configurar servidores nativos de Linux dentro de bash. Y, por supuesto, el comando sh, dentro de bash, también funciona.

Egbert
fuente
0

Es posible que el problema esté realmente dentro del archivo name.sh: está intentando usar el .comando pero está intentando ejecutar una especie de shell (por ejemplo, cshcreo) en el que no es un comando válido.

Entonces: ¿ name.shcomienza con el correcto #!/bin/sh(si realmente está intentando ejecutar sh)?

Andrew Jaffe
fuente
1
sí, comienza #! / bin / sh cd D: \ Raghu D: winzip32.exe -min -a -r D: \ p ese es el contenido del archivo
0

ok, hay MUCHO mal con eso: suelta #! / bin / sh, y cambia la extensión a bat, y podría funcionar con algunas correcciones más. Luego puede invocarlo también por su nombre de archivo.

La sintaxis de un script de shell de Unix y un archivo por lotes de Windows no son muy similares. cygwin, o un montón de jugar con unxutils podría hacer algo que funcione en ambos, pero a menos que esté ABSOLUTAMENTE seguro de que el entorno es siempre el mismo, no vale la pena el dolor de cabeza

Journeyman Geek
fuente
drop the #!/bin/sh, and change the extention to bat, and it might work with a few more fixes.¡¿Qué?! Sospecho que nunca probaste esto ... En Windows, incluso las capacidades de bash más simples no son compatibles o requieren una larga sintaxis.
Camilo Martin
El segundo párrafo cubre el hecho de que es probable que no funcione, sin una buena cantidad de trabajo.
Journeyman Geek
Pues tienes razón.
Camilo Martin
0

Si tiene una caja de Linux en su hogar (o trabajo) y está conectada a la misma red, y esta red es segura, esto podría ser el truco:

  1. Haga una carpeta compartida en Windows (bastante fácil, pero asegúrese de que la red esté a salvo de intrusos).
  2. Móntelo en Linux con mount //WinMachine/Share LinuxFolder(IIRC, y requiere Samba ).
  3. Usando algo como PuTTY , inicie sesión de forma remota en ese cuadro de Linux.
  4. Ejecute su comando en la carpeta montada.
Camilo Martin
fuente
0

Para ejecutar el script de shell desde las ventanas. Primero use el comando: dos2unix, luego puede usar su comando normal: sh runide.sh

Esto funcionará.

Sridhar GV
fuente
Lo sentimos, hay que hacer una pequeña corrección. Use el comando: "dos2unix runide.sh" Salida: dos2unix: convierta el archivo runide.sh a formato UNIX y luego use su comando: "sh runide.sh" Esto seguramente ejecutará su script de shell. Aprendizaje feliz
Sridhar GV
La pregunta no era sobre el formato de archivo, sino más bien sobre la falta de shell en Windows.
Archemar
0

Aunque las respuestas existentes aquí eran correctos en el momento, Windows 10 hace ahora incluyen opcionalmente una versión modificada de Ubuntu ejecutar un shell bash completa .

Una vez que se hacen ejecutables, los scripts se pueden ejecutar de la forma habitual desde bash, por ejemplo:

chmod +x myscript.sh
./myscript.sh

Si desea ejecutar un script directamente desde Windows, puede crear un acceso directo en el mismo directorio y establecer el 'Destino' en algo como:

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

Si la ruta de su script es relativa a la ubicación del acceso directo (como en el ejemplo anterior), asegúrese de que el campo 'Iniciar en' también esté en blanco.

Molomby
fuente