2009-07-29 9 views
8
#!/bin/bash 
echo "Testing" 
cd "/cygdrive/x/Internal Communications/Riccardo/" 
filename=htdocs-`date +%A`.tar.gz 
tar cvzf $filename "/cygdrive/c/Program Files/Zend/Apache2/htdocs" 

Lo script sopra funziona quando viene chiamato all'interno di cygwin console, ma quando provo a chiamarlo da un file batch ottengo "comando non trovato" per data e comando tar Penso che bash.exe non abbia il PATH impostato.comando di script bash cywin non trovato quando chiamato dal batch

Ho bisogno di eseguire quello script da quel file batch perché voglio aggiungere lo script all'utilità di pianificazione.

risposta

8

Inserire la directory del cestino cygwin (probabilmente C:\cygwin\bin) nella variabile di ambiente PATH.

Questo sarebbe anche darvi il vantaggio di essere in grado di usare i comandi come tar, ls, rm, ecc da un normale finestre di console e non solo una console di Cygwin.

+0

Perché non ho pensato di aggiungere cygwin alla mia vittoria PERCORSO !!! Grazie. – rtacconi

+0

Ciao, ho aggiunto il percorso (sono sicuro che questo è il percorso corretto) ma i comandi ls, grep, etc non sono ancora stati trovati.qualche idea? – Lysdexia

10

FWIW, Cygwin ha cron.

Stai chiamando il tuo script in questo modo?

bash --login -i ./myscript.sh 
+4

Delle persone che hanno inviato risposte finora, Seth è l'unica persona che riconosce che mettere C: \ cygwin \ bin sul percorso non consente a Windows di comprendere magicamente gli script di bash. Devi inviare il tuo script a bash.exe. – rob

+0

Il batch è: C: \ cygwin \ bin \ bash.exe "C: \ backup.sh" Penso di non aver installato cron in cygwin. Devo installarlo solo o devo fare qualche altra configurazione per usare cron? Grazie compagno! – rtacconi

+0

@rtacconi - è più che una semplice installazione. Il link che ho nella mia risposta passa attraverso i passaggi di installazione/configurazione di cron – seth

2

Se questo script viene richiamato da una shell dei comandi di Windows, la prima linea si tradurrà in un errore poiché #!/bin/bash non è un comando riconosciuto Windows e # non è un delimitatore di commento valida in un file batch.

Quindi, la linea di fondo è che questo script viene eseguito come un normale file batch piuttosto che dalla base di Cygwin. Come notato da matt b, probabilmente non si ha il percorso eseguibile di Cygwin nella variabile d'ambiente PATH. Senza questo, il file batch non riesce a trovare le utilità Cygwin (tar e date).

14

Come è già stato detto, è necessario aggiungere i binari di Cygwin al percorso. Per fare ciò, fare clic destro su "Risorse del computer", fare clic su "Proprietà", quindi "Avanzate", quindi "Variabili d'ambiente".

Creare una nuova variabile di ambiente con nome "CYGWIN_HOME" e il valore "C: \ cygwin" (o ovunque sia installato cygwin. Il percorso predefinito è "C: \ cygwin \", quindi questo probabilmente dovrebbe funzionare per voi).

Quindi modificare la variabile d'ambiente denominata "PATH", e virare su quanto segue alla fine:

;% CYGWIN_HOME% \ bin;% CYGWIN_HOME% \ sbin;% CYGWIN_HOME% \ usr \ bin;% CYGWIN_HOME % \ usr \ sbin;% CYGWIN_HOME% \ usr \ local \ bin;% CYGWIN_HOME% \ usr \ local \ sbin

Chiudere il prompt dei comandi, quindi riaprirlo. I binari di cygwin ora dovrebbero essere disponibili. Puoi ricontrollare ciò digitando "which bash". Dovrebbe segnalare la posizione del tuo eseguibile bash.

0

Ho appena avuto questo problema.

La modifica della variabile di ambiente funziona alla grande. Ma se non hai diritti di amministratore non puoi farlo. In questo caso è possibile eseguire i comandi utilizzando il percorso assoluto come:

/usr/bin/tar cvzf $filename 
/usr/bin/cat $filename 

In tal caso lo script bash funziona anche se si chiama da un file batch.

Problemi correlati