2009-07-29 13 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" 

El script anterior está trabajando cuando se le llama en el interior de la consola Cygwin, pero cuando trato de llamarlo desde un archivo por lotes me sale "comando no encontrado" para la fecha y comando tar Creo que bash.exe no tiene la configuración PATH.comando cywin escritura del golpe no encontrado cuando se llama desde lotes

Necesito ejecutar ese script desde ese archivo por lotes porque quiero agregar el script al planificador de tareas.

Respuesta

8

Coloque su directorio cygwin bin (probablemente C:\cygwin\bin) en la variable de entorno PATH.

Esto también le daría la ventaja de ser capaz de utilizar comandos como tar, ls, rm, etc., desde una ventana de la consola regulares y no sólo una consola de Cygwin.

+0

¿Por qué no pensé en agregar cygwin a mi victoria PATH !!! Gracias. – rtacconi

+0

Hola, he agregado la ruta (estoy seguro de que esta es la ruta correcta) pero todavía no se encuentran los comandos ls, grep, etc.¿alguna idea? – Lysdexia

10

FWIW, Cygwin tiene cron.

¿Está llamando a su secuencia de comandos de esta manera?

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

De las personas que han publicado respuestas hasta ahora, seth es la única persona que reconoce que poner C: \ cygwin \ bin en la ruta no le permite a Windows entender mágicamente los scripts bash. Debe enviar su script a bash.exe. – rob

+0

El lote es: C: \ cygwin \ bin \ bash.exe "C: \ backup.sh" Creo que no he instalado cron en cygwin. ¿Debo instalarlo solo o tengo que hacer más configuraciones para usar cron? ¡Gracias amigo! – rtacconi

+0

@rtacconi - es más que solo instalar. El enlace que tengo en mi respuesta sigue los pasos de instalación/configuración de cron – seth

2

Si este script es invocado desde una consola de comandos de Windows, la primera línea dará lugar a un error ya #!/bin/bash no es un comando reconocido Windows y # no es un delimitador de comentario válido en un archivo por lotes.

Por lo tanto, la conclusión es que esta secuencia de comandos se ejecuta como un archivo por lotes normal en lugar de dentro de bash de Cygwin. Como se señala en matt b, es probable que no tenga la ruta ejecutable Cygwin en la variable de entorno PATH. Sin esto, el archivo de proceso por lotes no puede encontrar las utilidades de Cygwin (tar y date).

14

Como ya se ha dicho, debe agregar los binarios de Cygwin a su ruta. Para hacerlo, haga clic derecho en "Mi PC", haga clic en "Propiedades", luego "Avanzado", luego "Variables de entorno".

Crea una nueva variable de entorno con el nombre "CYGWIN_HOME" y el valor "C: \ cygwin" (o donde hayas instalado cygwin. La ubicación predeterminada es "C: \ cygwin \", así que probablemente funcione).

continuación, edite la variable de entorno denominada "camino", y la pegajosidad en la siguiente al final:

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

Cierre el símbolo del sistema y vuelva a abrirlo. Los binarios de cygwin ahora deberían estar disponibles. Puede volver a verificar esto escribiendo "which bash". Debe informar la ubicación de su ejecutable bash.

0

Acabo de tener este problema.

La edición de la variable de entorno funciona muy bien. Pero si no tienes derechos de administrador, no puedes hacer eso. En este caso se pueden ejecutar los comandos utilizando la ruta absoluta como:

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

Si lo hace su escritura del golpe funciona incluso si se llama desde un archivo por lotes.

Cuestiones relacionadas