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

Le script ci-dessus fonctionne quand il est appelé à l'intérieur de la console Cygwin, mais lorsque je tente de l'appeler à partir d'un fichier batch I get "command not found" pour la date et commande tar. Je pense que bash.exe n'a pas la configuration de PATH.commande script bash cywin ne se trouve pas lorsqu'il est appelé de lot

Je dois exécuter ce script à partir de ce fichier batch parce que je veux ajouter le script au planificateur de tâches.

Répondre

8

Mettez votre répertoire bin Cygwin (probablement C:\cygwin\bin) sur votre variable d'environnement PATH.

Cela aussi vous donner l'avantage de pouvoir utiliser des commandes comme tar, ls, rm, etc. à partir d'une fenêtre de la console régulière et non pas seulement une console Cygwin.

+0

Pourquoi je n'ai pas pensé à ajouter cygwin à ma victoire PATH !!! Merci. – rtacconi

+0

Salut, j'ai ajouté le chemin (je suis sûr que c'est le bon chemin) mais les commandes ls, grep, etc ne sont toujours pas trouvées.une idée? – Lysdexia

10

FWIW, Cygwin a cron.

appelez-vous votre script comme ça?

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

Parmi les personnes qui ont posté des réponses jusqu'à présent, seth est la seule personne qui reconnaît que mettre C: \ cygwin \ bin sur le chemin ne permet pas à Windows de comprendre par magie les scripts bash. Vous devez envoyer votre script à bash.exe. – rob

+0

Le lot est: C: \ cygwin \ bin \ bash.exe "C: \ backup.sh" Je pense que je n'ai pas installé cron dans cygwin. Ai-je besoin de l'installer uniquement ou dois-je faire plus de configuration pour utiliser cron? Merci mon pote! – rtacconi

+0

@rtacconi - c'est plus qu'une simple installation. Le lien que j'ai dans ma réponse passe par les étapes d'installation/configuration de cron – seth

2

Si ce script est appelé à partir d'un shell de commande Windows, la première ligne se traduira par une erreur puisque #!/bin/bash n'est pas une commande Windows reconnue et # n'est pas un séparateur de commentaires valide dans un fichier batch.

Ainsi, la ligne de fond est que ce script fonctionne comme un fichier batch régulier plutôt que de l'intérieur bash Cygwin. Comme noté par matt b, vous n'avez probablement pas le chemin d'accès exécutable Cygwin dans votre variable d'environnement PATH. Sans cela, le fichier de commandes ne trouve pas les utilitaires Cygwin (tar et date).

14

Comme on l'a déjà dit, vous devez ajouter les Cygwin sur votre chemin. Pour ce faire, faites un clic droit sur "Poste de travail", cliquez sur "Propriétés", puis sur "Avancé", puis sur "Variables d'environnement". Créez une nouvelle variable d'environnement avec le nom "CYGWIN_HOME" et la valeur "C: \ cygwin" (ou partout où vous avez installé cygwin L'emplacement par défaut est "C: \ cygwin \", cela devrait probablement marcher pour vous).

modifier la variable d'environnement nommée "PATH", et amure sur ce qui suit à la fin:

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

Fermez votre invite de commande, puis rouvrez-la. Les binaires cygwin devraient maintenant être disponibles. Vous pouvez vérifier cela en tapant "quel bash". Il devrait signaler l'emplacement de votre exécutable bash.

0

J'ai juste eu ce problème.

L'édition de la variable d'environnement fonctionne très bien. Mais si vous n'avez aucun droit d'administrateur, vous ne pouvez pas le faire. Dans ce cas, vous pouvez exécuter vos commandes en utilisant le chemin absolu comme:

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

Si vous le faites votre script bash fonctionne même si vous appelez à partir d'un fichier batch.

Questions connexes