Come eseguire il file .sh su Windows?


67

Quando sto cercando di eseguire un file (name.sh) nella riga di comando dal comando ./name.sh, visualizzo l'errore che:

"" non è riconosciuto come comando interno o esterno, file eseguibile o batch

per favore aiutatemi ad eseguire il file .sh

Risposte:


74

Sei su Windows CMD.EXE (dal messaggio di errore). Utilizza una sintassi diversa per eseguire i comandi. Dovrai utilizzare sh name.sh, supponendo che tu abbia Cygwin o simili installati.

Per chiarire, Windows non ha un'utilità integrata per supportare i file .sh. Per eseguirlo, devi installare uno strumento di terze parti come Cygwin .


7
Potresti anche non solo installare Git su Windows? Sembra che così facendo si aggiunga il supporto per gli script di shell anche se quegli script di shell non eseguono attività correlate a Git.
DaveTheMinion,

2
@DavidB Sì, funziona se metti C: \ Programmi (x86) \ Git \ bin (o qualunque cosa sia sul tuo computer) nel tuo PERCORSO, perché Git mette lì ogni sorta di strumenti utili tra cui sh.exe
Sumyrda

1
@DavidB Sì, Git Bash sa cosa farne, giusto!
Legends

13

Stai tentando di eseguire un comando Linux dal prompt dei comandi di Windows.

Su Linux la barra rovesciata è un separatore di percorso. Su Windows la barra rovesciata è un separatore di percorso e la barra in avanti indica generalmente un argomento.

Pertanto, Windows pensa che tu stia tentando di eseguire un comando chiamato "." e analizzandolo l'argomento "/name.sh". La convenzione corretta sarebbe ". \ Name.sh". Inoltre, Windows cercherà automaticamente nella directory corrente il tuo comando in modo da poter digitare "name.sh".

Il prossimo problema che dovrai affrontare è che Windows non sa cosa sia uno script sh, anche questa è una cosa Linux. È possibile risolvere questo problema installando Cygwin se si desidera o è necessario eseguire uno script sh.

Tuttavia, a giudicare da uno dei tuoi precedenti commenti, puoi anche rinominare lo script in name.bat ed eliminare la riga "#! / Bin / sh". Ora hai un file batch che Windows dovrebbe capire. Puoi leggere di più sui file batch qui .


12

In alternativa, potresti passare al lato oscuro e installare Linux. Dal prompt:

sh runide.sh

o

sudo sh runide.sh

Il tuo programma verrà eseguito e avrai anche un sistema migliore.


15
È come dire: "
Diventa

7

La migliore soluzione secondo me:

  • Scarica e installa .git per Windows

  • Fare clic destro sul desktop e dire "git bash qui"

  • Esegui il tuo script come in unix

  • Fatto!

Attenzione: molti comandi non funzionano su Windows! Tuttavia, funzioneranno molte delle cose di base.

Se hai bisogno di quello script regolarmente potresti voler creare un collegamento (sul tuo desktop ad es.):

  • Creare un collegamento per mintty.exeil tuo desktop

  • Modifica le proprietà del collegamento e modifica l'obiettivo (mantieni il percorso):

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


Questo non funziona. Quando eseguo @FOR / f "tokens = *"% i IN ('docker-machine env --shell cmd default') DO @% i. Ricevo token inaspettati (
Steve Tomlin,

5

Stai cercando di far funzionare la tua auto con succo d'arancia anziché benzina. Windows condivide comandi simili memorizzati in file .bat o .cmd con gli script della shell Unix / Linux / zOS Unix Subsystem / * ix poiché queste due famiglie di sistemi operativi condividono un antenato comune delle macchine DEC PDP-x.

Se vuoi una gratificazione immediata, dovrai installare un ambiente che fornisca un programma "sh.exe" o "csh.exe" o "bash.exe" (tsh.exe qualcuno?)

In alternativa, se conosci molto bene i comandi di script Unix e conosci i comandi dei file .cmd e .bat di Windows, puoi tradurre il file .sh in un file .bat o .cmd. Anche così, incontrerai spesso più programmi in stile Unix che non hanno equivalenti in Windows - grep, sed, vi, emacs, ecc. Quindi, la chiamata per installare CygWin (non minimalista) - solo per ottenere la shell e Unix utensili. Mettilo su un'unità flash, per queste occasioni speciali.


3

Qualcuno ha detto qualcosa su MS-DOS usando /per comandi e \percorsi. Questo è leggermente fuorviante. Guarda il mio esempio:

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

Non ha alcuna differenza nell'effetto. Sì, non è vero per tutte le operazioni: la risposta effettiva è semplicemente No , o senza Cygwin o SSHD non è possibile.

Io so solo perché ho stupidamente trascorso una mezza giornata cercando di capire che cosa if then fie eval, execfaccio con -Djava.somethingquando viene chiamato.



1

Ho trovato una soluzione diversa e semplice, chiamata UnixUtil .

Scarica e decomprimilo su C: drive. Imposta la variabile d'ambiente pathda includere C:\UnixUtils\usr\local\wbin.

Questo è importante. NON impostare il percorso suC:\UnixUtils\bin


1

Per completezza, desidero menzionare una nuova funzionalità "Sottosistema Windows per Linux" per Windows 10. I dettagli sono descritti in http://www.howtogeek.com/249966/how-to-install-and-use-the-linux- bash-shell-on-finestre-10 /

Si noti che è necessario attivare l'opzione "Modalità sviluppatore" e abilitare l'opzione "Sottosistema Windows per Linux (Beta)".

Per quanto mi riguarda, ho scoperto che l'installazione di Git per Windows (che sto usando comunque) è sufficiente.


1

Questo è un vecchio thread ma per quelli che eseguono Windows 10. Basta aprire le funzionalità di Windows dal pannello di controllo 'Attiva o Disattiva funzionalità di Windows'

Scegli la funzione "Sottosistema Windows per Linux". Dopo l'installazione, hai "Bash" e puoi persino configurare server Linux nativi in ​​bash. E ovviamente, anche il comando sh, all'interno di bash, funziona.


0

È possibile che il problema sia effettivamente all'interno del file name.sh: stai tentando di utilizzare il .comando ma sta tentando di eseguire un tipo di shell (ad esempio, cshpenso) in cui non è un comando valido.

Quindi: name.shinizia con il corretto #!/bin/sh(se stai effettivamente cercando di eseguire sh)?


1
sì, inizia #! / bin / sh cd D: \ Raghu D: winzip32.exe -min -a -r D: \ p questo è il contenuto del file

0

ok, c'è MOLTO sbagliato in questo - lascia cadere #! / bin / sh e cambia l'estensione in bat, e potrebbe funzionare con qualche altra correzione. Quindi puoi semplicemente invocarlo anche con il suo nome file.

La sintassi di uno script shell unix e un file batch di Windows non sono troppo simili. cygwin o un sacco di problemi con unxutils potrebbero creare qualcosa che funzionerebbe in entrambi, ma a meno che tu non sia ASSOLUTAMENTE sicuro che l'ambiente sia sempre lo stesso, non vale la pena mal di testa


drop the #!/bin/sh, and change the extention to bat, and it might work with a few more fixes.Che cosa?! Sospetto che tu non l'abbia mai provato ... Su Windows, anche le funzionalità bash più semplici non sono supportate o richiedono una sintassi prolungata.
Camilo Martin,

Il secondo paragrafo riguarda il fatto che è probabile che non funzioni senza una discreta quantità di lavoro.
Journeyman Geek

Bene, hai ragione.
Camilo Martin,

0

Se hai una scatola Linux a casa (o al lavoro) e collegata alla stessa rete e questa rete è sicura, questo potrebbe fare il trucco:

  1. Crea una condivisione di cartelle su Windows (abbastanza semplice, ma assicurati che la rete sia al sicuro dagli intrusi).
  2. Montalo su Linux con mount //WinMachine/Share LinuxFolder(IIRC e richiede Samba ).
  3. Usando qualcosa come PuTTY , accedi in remoto a quella casella Linux.
  4. Esegui il comando nella cartella montata.

0

Per eseguire lo script della shell da Windows. Per prima cosa usa il comando: dos2unix quindi puoi usare il tuo normale comando: sh runide.sh

Questo funzionerà.


Siamo spiacenti, è necessario apportare una leggera correzione. Utilizzare il comando: "dos2unix runide.sh" Output: dos2unix: conversione del file runide.sh in formato UNIX, quindi utilizzare il comando: "sh runide.sh" Questo eseguirà sicuramente lo script della shell. Buon apprendimento
Sridhar GV,

la domanda non riguardava il formato del file, ma piuttosto la mancanza di shell in Windows.
Archemar,

0

Anche se le risposte esistenti qui erano corrette al momento, Windows 10 non includono ora opzionalmente una versione modificata di Ubuntu in esecuzione una shell bash completa .

Una volta resi eseguibili, gli script possono essere eseguiti come al solito da bash, ad esempio:

chmod +x myscript.sh
./myscript.sh

Se si desidera eseguire uno script direttamente da Windows, è possibile creare un collegamento nella stessa directory e impostare "Destinazione" su qualcosa del tipo:

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

Se il percorso dello script è relativo alla posizione del collegamento (come nell'esempio sopra), assicurarsi che anche il campo "Avvia in" sia vuoto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.