2010-03-15 07:34:42 +0000 2010-03-15 07:34:42 +0000
68
68
Advertisement

Come eseguire un file .sh su Windows?

Advertisement

Quando cerco di eseguire un file (nome.sh) nella riga di comando con il comando ./name.sh , ottengo l'errore che:

“.” non è riconosciuto come comando interno o esterno, operabile o file batch

aiutatemi ad eseguire il file .sh

Advertisement

Risposte (15)

76
76
76
2010-03-15 07:58:46 +0000

Siete su Windows CMD.EXE (dal messaggio di errore). Utilizza una sintassi diversa per eseguire i comandi. Dovrete usare sh name.sh, supponendo che abbiate installato Cygwin o simili.

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

13
13
13
2010-03-15 13:48:44 +0000

Si sta cercando di eseguire un comando Linux al prompt dei comandi di Windows

Su Linux la barra di avanzamento è un separatore di percorsi. Su Windows la barra indietro è un separatore di percorso e la barra avanti indica generalmente un argomento.

Pertanto, Windows pensa che si sta cercando di eseguire un comando chiamato “.” e analizzandolo l'argomento “/name.sh”. La convenzione corretta sarebbe “.\nome.sh”. Inoltre Windows cercherà automaticamente la directory corrente per il vostro comando in modo da poter digitare semplicemente “name.sh”.

Il prossimo problema che dovrete affrontare è che Windows non sa cosa sia uno script sh, anche in questo caso si tratta di una cosa Linux. Potreste risolvere questo problema installando Cygwin se volete o avete bisogno di eseguire uno script sh.

Tuttavia, a giudicare da uno dei vostri commenti precedenti, potreste anche rinominare lo script in name.bat e cancellare la riga “#!/bin/sh”. Ora avete un file Batch che Windows dovrebbe comprendere. Potete leggere di più sui file batch qui .

11
Advertisement
11
11
2010-11-18 15:46:30 +0000

In alternativa si può passare al lato oscuro e installare Linux. Dal prompt:

sh runide.sh

o

sudo sh runide.sh

Il vostro programma verrà eseguito e avrete anche un sistema migliore.

9
9
9
2017-04-09 18:58:10 +0000

La migliore soluzione secondo me:

  • Scaricare e installare .git per Windows

  • Fare clic destro sul desktop e dire “git bash here ”

  • Eseguire lo script come in unix

  • Fatto!

Attenzione: Molti comandi non funzionano su Windows! Ma comunque, molte cose di base funzioneranno.

Se avete bisogno di quello script regolarmente, potreste voler creare una scorciatoia (sul vostro desktop ad esempio):

  • Creare una scorciatoia a mintty.exe sul vostro desktop

  • Modificare le proprietà della scorciatoia e cambiare l'obiettivo (mantenere il percorso):

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

5
Advertisement
5
5
2011-08-16 22:52:50 +0000

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

Se volete una gratificazione immediata, dovrete installare un ambiente che fornisca un “sh. exe” o “csh.exe” o “bash.exe” (tsh.exe chiunque?)

In alternativa, se si conoscono molto bene i comandi degli script Unix, e si conoscono molto bene i comandi dei file .cmd e .bat di Windows, si può tradurre il file .sh in un file .bat o .cmd. Anche così, spesso si incontrano più programmi in stile Unix che non hanno equivalenti sotto Windows - grap, sed, vi, vi, emacs, ecc. Così, la chiamata per installare CygWin (non minimalista)– solo per ottenere la shell e gli strumenti Unix. Mettetelo su una flash-drive, per queste occasioni speciali.

3
3
3
2012-05-28 23:19:47 +0000

Qualcuno ha parlato di MS-DOS che usa / per i comandi e Qualcuno ha parlato di MS-DOS che usa/` per i comandi e per i percorsi. Questo è leggermente fuorviante. Guardate il mio esempio:

C:\myfoo\foo\>cd../.. 
C:\myfoo\foo\>cd..\..
``` &001 


non ha alcuna differenza di effetto. Sì, non è vero per tutte le operazioni - la risposta effettiva è semplicemente _No_, o senza Cygwin o SSHD non si può. 


Lo so solo perché ho stupidamente passato mezza giornata a cercare di capire cosa fanno `if then fi` e `eval`, `exec` con `-Djava.something` quando vengono chiamati.
2
Advertisement
2
2
2015-07-20 16:24:31 +0000

Utilizzare Github per Windows. Contiene tutti gli eseguibili dell'ambiente Unix. https://github-windows.s3.amazonaws.com/GitHubSetup.exe

1
1
1
2014-05-13 22:05:11 +0000

Ho trovato una soluzione diversa e semplice, chiamata UnixUtil .

Download e decomprimere su C: drive. Impostare la variabile d'ambiente path per includere C:\UnixUtils\usr\local\wbin.

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

1
Advertisement
1
1
2018-05-01 16:06:51 +0000

Questo è un vecchio thread, ma per quelli che usano Windows 10. Basta aprire le funzioni di Windows dal pannello di controllo ‘Attivare o disattivare le funzioni di Windows’

Scegliere la funzione ‘Windows Subsystem for Linux’. Dopo l'installazione, si ha ‘Bash’ e si possono anche configurare i server Linux nativi all'interno di bash. E naturalmente, anche il comando sh, all'interno di bash, funziona.

1
1
1
2016-12-27 10:39:14 +0000

Per completezza voglio citare una nuova funzionalità “Windows Subsystem for Linux” per Windows 10. I dettagli sono descritti in http://www.howtogeek.com/249966/how-to-install-and-use-the-linux-bash-shell-on-windows-10/

Nota, che richiede l'attivazione dell'interruttore “Developer Mode” e l'abilitazione dell'opzione “Windows Subsystem for Linux (Beta)”.

Per me stesso ho trovato che l'installazione di Git for Windows (che sto comunque utilizzando) è sufficiente.

0
Advertisement
0
0
2012-08-31 15:16:38 +0000

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

  1. 1. Fate una condivisione delle cartelle su Windows (abbastanza facile, ma assicuratevi che la rete sia al sicuro da intrusi).
  2. Montatela su Linux con mount //WinMachine/Share LinuxFolder (IIRC, e richiede Samba ).
  3. Usando qualcosa come PuTTY , accedere in remoto a quella scatola di Linux.
  4. 4. Eseguire il comando nella cartella montata.
0
0
0
2010-03-15 13:46:42 +0000

Ok, c'è un sacco di sbagliato in questo - lasciate cadere il #!/bin/sh, e cambiate l'estensione alla battuta, e potrebbe funzionare con qualche altra correzione. Poi si può semplicemente invocarlo anche con il suo nome di file.

La sintassi di uno script shell unix e di un file batch di windows non è troppo simile. cygwin, o un sacco di pasticci con unxutils potrebbe fare qualcosa che funzionerebbe in entrambi, ma a meno che non siate ASSOLUTAMENTE sicuri che l'ambiente sia sempre lo stesso, non vale la pena di rompere…

0
Advertisement
0
0
2016-08-25 07:34:59 +0000

Anche se le risposte esistenti qui erano corrette all'epoca, Windows 10 faes ora include opzionalmente una versione modificata di Ubuntu che esegue un bash shell completo .

Una volta resi eseguibili, gli script possono essere eseguiti nel modo consueto dall'interno di bash, ad esempio:

chmod +x myscript.sh
./myscript.sh
``` ```
C:\Windows\System32\bash.exe -c "./myscript.sh"

Se si vuole eseguire uno script direttamente da Windows si può creare una scorciatoia nella stessa directory e impostare il ‘Target’ su qualcosa come:

&001

Se il percorso del proprio script è relativo alla posizione della scorciatoia (come l'esempio precedente) assicurarsi che anche il campo ‘Start in’ sia vuoto.

0
0
0
2015-11-23 11:57:56 +0000

Per eseguire lo script di shell dalle finestre. Usare prima il comando : dos2unix poi si può usare il normale comando : sh runide.sh

Questo funzionerà.

0
Advertisement
0
0
2010-03-15 07:55:19 +0000

E’ possibile che il problema sia effettivamente all'interno del file name.sh – si sta cercando di usare il comando . ma si sta tentando di eseguire una sorta di shell (ad esempio, csh, credo) in cui questo non è un comando valido.

Quindi: name.sh inizia con il corretto #!/bin/sh (se si sta effettivamente tentando di eseguire sh)?

Advertisement
Advertisement