2009-04-24 15 views
15

Quando eseguo uno script .bat da bash in Cygwin, con quale meccanismo è in esecuzione? Capisco che se eseguo un file .EXE verrà avviato, indipendentemente dal fatto che .EXE provenga da Cygwin o da un ambiente più tradizionale. Capisco che quando eseguo uno script eseguibile con #! all'inizio Cygwin fornisce la magia per farlo funzionare.Perché Cygwin può eseguire gli script .bat?

Ma perché uno script .bat funziona? C'è qualche componente all'interno di Cygwin che è a conoscenza di cosa sia uno script Windows .bat e cosa fare con esso? O è in qualche modo impossibile in Windows eseguire una chiamata per avviare un file .EXE che non funzionerà automaticamente anche per uno script .bat?

risposta

10

Credo che bash in cygwin veda l'estensione bat come eseguibile contrassegnato (una cygwin hit-tip alla convenzione di windows). Come tale carica ed esegue il file con il suo interprete associato (cmd.exe, configurazione per os), tanto quanto crea una nuova istanza di bash per eseguire il tuo #! script (per standard posix).

+1

Per gli script di shell UNIX normali dovrebbe caricare il programma specificato dopo lo shebang, non utilizzare ciecamente bash (e gli script che specificano bash potrebbero non essere molto portabili :)) – Joey

+0

Questo funziona per .bat ma non per .ps1 (PowerShell). Cygwin deve avere una gestione integrata dei file .bat. –

9

Esecuzione

./test.bat params 

da bash sembra essere equivalente a

cmd /c test.bat params 
2

E se si vuole sborsare un'esecuzione file .cmd * come un processo shellscript e aggiungere il suo registro a un file:

cmd /c test.bat > nohup.out & 

Divertiti!

Problemi correlati