2011-11-27 20 views
18

So che quando Cygwin installa c'è un file batch che viene utilizzato per avviarlo in Windows. Ma se voglio eseguire uno script senza avviare Cygwin e fare "./script"Cygwin esegue uno script da un file batch?

Come posso creare un file batch per farlo?

Come in ... basta avere un file batch che quando si fa clic, apre Cygwin ed esegue lo script della shell.

risposta

27

Per eseguire "foo.bsh", creare un file batch con i seguenti contenuti ed eseguirlo:

set PATH=C:\cygwin\bin;%PATH% 
    c:\cygwin\bin\bash.exe c:\path\to\foo.bsh 

La "C: \ cygwin \ bin" parte possono differire a seconda della scelta percorso di installazione di cygwin.

+0

sì, questo funziona .. grazie – dhroove

3

Che tipo di script di shell? Bash? Se hai bisogno di eseguire uno script bash, eseguilo con bash.exe tramite un collegamento. L'obiettivo sarebbe qualcosa di simile:

C:\cygwin\bin\bash.exe foo.bsh 

Il percorso per bash.exe dipenderà da dove è stato installato Cygwin. (Non è necessario il percorso se la directory bin è nella variabile di ambiente path.)

Se lo si desidera, è possibile eseguire la stessa operazione in uno script batch. La riga di comando sarebbe la stessa di "target" sopra.


EDIT BASATI SU COMMENTI (bash ancora assumendo):

Ok, quindi nello script batch (.bat) basta digitare:

bash.exe script.txt 

potrebbe essere necessario aggiungere il percorso per "bash.exe". Se non sei sicuro di dove sia "bash.exe", apri il file "Cygwin.bat" che hai menzionato nella tua domanda. Dovrebbe avere il percorso in un comando chdir. (Nota: Cygwin.bat esegue semplicemente bash.exe in modalità interattiva. Non è in realtà in esecuzione qualcosa chiamato "cygwin".)

Sarà inoltre necessario aggiungere il percorso a "script.txt" se non è nella stessa directory dello script batch.

Anche in questo caso funzionerà anche in una scorciatoia anziché in uno script batch.

+0

Bene, voglio eseguire uno script di shell. Ma non voglio aprire Cywgin, quindi digitare tutte quelle cose per eseguirlo. Preferirei semplicemente eseguire un file batch per aprire cygwin e poi farlo in quel modo, se possibile. – Aaron

+1

@ Aaron - Digitare tutto ciò che roba? Qualsiasi riga di comando, compresi gli argomenti della riga di comando, che si utilizzano per eseguire lo script in cygwin, può essere aggiunta al collegamento o allo script batch. Cygwin non si aprirà, ma verrà visualizzata una finestra di cmd. Dovrebbe chiudersi al termine dell'esecuzione dello script. –

+0

Ho uno script di shell che eseguo in cygwin. Mi stavo chiedendo se potevo creare un file batch che avrebbe fatto tutto per me invece di digitare tutto? Ma non sono sicuro di come usare cygwin nel file batch. – Aaron

8

Si potrebbe provare qualcosa di simile al trampolino da CMD a BASH (o qualsiasi altra cosa sh-variante):

: <<TRAMPOLINE 
    @echo off 
    bash -c "exit 0" || (echo.No bash found in PATH! & exit /b 1) 
    bash "%~f0" "%*" 
    goto :EOF 
    TRAMPOLINE 
    ##################### 
    #!/bin/bash -- it's traditional! 
    echo "Hello from $SHELL" 
+1

Questo ha funzionato bene per me, ma ho scoperto che dovevo usare terminazioni di linee stile UNIX quando salvavo il file per assicurarmi che lo script di bash fosse felice. – gdt

5

mi piacerebbe ampliare la risposta data da Austin Hastings per permettergli di lavorare senza Cygwin nel percorso e lavorare nella configurazione della directory con il file bat (quindi viene utilizzata anche una scorciatoia con un diverso percorso "Start in"). Le modifiche includono il percorso completo per bash, utilizzare l'opzione -l per configurare correttamente bash con percorsi e ambiente e passare la directory corrente su bash come primo argomento che viene visualizzato (utilizzando shift). Ricordati di usare Unix newlines nel file o otterrai molti errori. Utilizzare anche UTF8 anziché ANSI.

: <<TRAMPOLINE 
@echo off 
C:\cygwin\bin\bash -c "exit 0" || (echo.No bash found in PATH! & exit /b 1) 
setlocal EnableDelayedExpansion 
for %%i in (%*) do set _args= !_args! "%%~i" 
C:\cygwin\bin\bash -l "%~f0" "%CD%" %_args% 
goto :EOF 
TRAMPOLINE 
##################### 
#!/bin/bash -- it's traditional! 
cd "$1" 
shift 
echo Working from $PWD 

Modifica: corretto il codice del trampolino per passare correttamente gli argomenti a bash. I file BAT non hanno un equivalente bash di "$ @" e un ciclo che elabora ogni argomento è fatto e quindi passato a bash.exe. Ora gestisce correttamente gli argomenti con spazi.

+0

Come si esce da questo comando? mettere 'exit/B' dopo' TRAMPOLINE' non funziona. –

+0

Basta digitare 'exit' come l'ambiente dopo che la riga' TRAMPOLINE' è in 'bash'. 'exit/B' è un comando' cmd'. – galmok

+0

Ho chiesto perché nel mio caso "exit" sembrava non funzionare. Da allora ho scoperto che stavo creando una shell di login (-I) e qualcosa nel mio '.bashrc' ecc stava creando altre istanze di bash che si aggiravano in background (impedendo così l'uscita dall'uccidere la finestra di cmd) . –

0

Per eseguire "your_bash_file" da qualsiasi file .bat, scrivere seguente riga alla bat:

git-bash.exe (path_to_your_bash_file>)

P.S. Windows Git è necessario installato

1

Se si desidera aprire lo script anche in una finestra con meno di un millimetro, questo (basato sulla risposta di @ galmok) farà il trucco.

: <<TRAMPOLINE 
@echo off 
C:\Users\user\Downloads\cyg-packages\bin\bash -c "exit 0" || (echo.No bash found in PATH! & exit /b 1) 
setlocal EnableDelayedExpansion 
for %%i in (%*) do set _args= !_args! "%%~i" 
C:\Users\user\Downloads\cyg-packages\bin\mintty.exe -i /Cygwin-Terminal.ico C:\Users\user\Downloads\cyg-packages\bin\bash -l "%~f0" "%CD%" %_args% 
goto :EOF 
TRAMPOLINE 
##################### 
#!/bin/bash -- it's traditional! 
cd "$1" 
shift 
echo Working from $PWD 
vim "[email protected]" 

Nota: il mio caso d'uso è stata la necessità di aprire un terminale vim da Visual Studio, che è il motivo per cui v'è una chiamata alla vim alla fine. Il file batch uscirà in seguito.

Problemi correlati