script shell simple dans cygwin

#!/bin/bash echo 'first line' >foo.xml echo 'second line' >>foo.xml 

Je suis un débutant total pour les scripts shell.

J’essaie d’exécuter le script ci-dessus dans cygwin. Je veux pouvoir écrire une ligne après l’autre dans un nouveau fichier.

Cependant, lorsque j’exécute le script ci-dessus, je vois le contenu suivant dans foo.xml:

 second line 

La deuxième fois que je lance le script, je vois dans foo.xml:

 second line second line 

etc.

En outre, je vois l’erreur suivante affichée à l’invite de commande après avoir exécuté le script:

 : No such file or directory.xml 

Je finirai par lancer ce script sur une boîte Unix, j’essaie juste de le développer en utilisant cygwin. Donc, je vous serais reconnaissant de bien vouloir indiquer si c’est une bizarrerie cygwin et si oui, devrais-je éviter d’essayer d’utiliser cygwin pour le développement de tels scripts?

Merci d’avance.

Exécutez dos2unix sur votre script shell. Cela résoudra le problème.

Mais il doit y avoir autre chose qui ne va pas ici. Quand je l’essaie, cela fonctionne comme prévu.

> foo.xml met la ligne dans foo.xml, remplaçant tout contenu précédent. >> foo.xml ajoute au fichier

Il semble que vous ayez une faute de frappe quelque part. Gardez également à l’esprit que l’invite de commande Windows peut tolérer des chemins avec des espaces incorporés, mais que les shells de cygwin ne le seront pas, donc si vous avez un nom de fichier contenant des espaces incorporés, vous devez soit

 echo 'first line' > 'My File.txt' echo 'first line' > My\ File.txt 

Il en va de même pour certains caractères “spéciaux”, y compris les guillemets, les esperluettes (&), les points-virgules (;) et la plupart des signes de ponctuation autres que point / arrêt complet (.).

Donc, si vous voyez ces problèmes en utilisant le script exact que vous utilisez (c.-à-d. Que vous le copiez et le collez, il n’y a aucune possibilité d’erreurs de transcription), alors quelque chose de vraiment étrange se produit. Sinon, il peut y avoir un espace mal placé ou un caractère non cité quelque part.

Je ne peux pas reproduire vos résultats. Le script que vous citez semble correct, et fonctionne effectivement comme prévu dans mon installation de Cygwin ici, produisant le fichier foo.xml contenant les lignes first line et second line ; ce qui sous-entend que ce que vous exécutez diffère de ce que vous avez cité d’une manière qui pose problème.

Le message d’erreur implique une sorte de problème avec le nom de fichier dans la première ligne d’ echo . Avez-vous des caractères non imprimables dans le script que vous exécutez? Avez-vous manqué d’échapper à un espace dans le nom de fichier? Etes-vous en train de remplacer des variables shell et de mal saisir le nom de la variable ou de ne pas échapper à la chaîne résultante?

Ce qui précède devrait fonctionner normalement .. Cependant, vous pouvez toujours spécifier un heredoc:

 #!/bin/bash cat < foo.xml first line second line EOF