J'ai utilisé Cygwin sur mon ordinateur portable (DOS). J'ai une collection de scripts de mes collègues et la mienne. Je ne suis pas un informaticien, je ne connais pas Unix. Je suis la syntaxe de mes collègues et capable de gérer quelques choses simples.
Les scripts fonctionnaient bien sur mon ancien ordinateur portable. Je viens de changer d'ordinateur portable, d'installer Cygwin. Lorsque j'exécute mes scripts, ils ne fonctionnent pas. Voici un exemple du message d'erreur que j'obtiens:
line 1: $':\r': command not found
line 5: syntax error near unexpected token `$'\r''
line 5: `fi
Voici les 5 premières lignes de mon script
:
iter=1
if [ -f iter.txt ]
then rm ./iter.txt
fi
Quelqu'un peut-il expliquer comment je peux contourner ce problème?
la source
vim
peut le faire de deux manières, dont l'une utilise des mots. Ou, mieux encore, pour indiquer où cette tâche subordonnée a été répondue encore et encore ici de manière beaucoup plus détaillée que toute réponse sur cette page, y compris unix.stackexchange.com/questions/88811 juste pour les débutants.vi -b
,\r
sont des extensions vim de toute façon. pas POSIX, pas dans nvi, elvis, Solaris vi ...Cela est dû au fait que le script a été enregistré par un éditeur qui utilise des fins de ligne DOS (comme Notepad ++, par exemple). Vous devrez les supprimer de vos scripts.
Pour ce faire, utilisez soit
dos2unix
sur le fichier de script, soit(cela supprimera tous les retours chariot de n'importe où dans le script)
Quant au code du script:
Cela devrait ressembler à quelque chose
Cela supprime le fichier
1.txt
du répertoire actuel, s'il existe. La:
commande ne fait rien (presque) et peut être supprimée. Laiter
valeur de la variable doit être utilisée comme$iter
, et être citée. Et puis je suis peut-être plus explicite que nécessaire en./
disant que le fichier doit être trouvé dans le répertoire courant.Si vous avez l' intention de transformer cela en une boucle (ici, supprimant tous les fichiers
1.txt
,2.txt
...,10.txt
):Ou, si nous nous sentons sournois / paresseux,
dans les coquilles qui comprend l'expansion de l'accolade.
la source
Windows (CR LF)
et le changer enUnix (LF)
rm -f [1-9].txt 10.txt
. Mais ce n'est pas totalement équivalent logiquement, comme s'il n'y avait pas de fichiers 1-9 mais qu'il y a un fichier appelé littéralement,[1-9].txt
il sera supprimé. : DVos scripts ont des terminaisons de ligne incorrectes. Windows utilise CR + LF (\ r \ n), Unix utilise LF (\ n) et Classic MacOS utilise CR (\ r). Vous devrez modifier les fins de ligne sur tous les fichiers concernés, à l'aide d'un éditeur de texte ou d'un outil autonome comme
dos2unix
.Les systèmes FTP et de contrôle de version tels que SVN ont tendance à être capables de convertir les fins de ligne de manière appropriée, donc vous voudrez peut-être examiner ces options pour le transfert de fichiers à l'avenir.
Si ces fichiers ne sont pas transférés, mais simplement utilisés sur une seule machine, vous voudrez trouver les paramètres des fins de ligne dans votre éditeur de texte préféré. La plupart de ceux qui sont annoncés comme "pour les programmeurs" auront une telle option.
la source
En guise de réponse supplémentaire, permettez-moi d'ajouter quelques notes / conseils ...
Tout d'abord, pour les fichiers texte normaux, vous pouvez facilement déterminer s'ils ont une ligne Unix ou DOS se terminant à l'aide de la
file
commande. Par exemple:Notez mon utilisation de
dos2unix
. Je vous recommande fortement de l'installer. Selon la façon dont vous utilisez Cygwin, vous pouvez constater que vous devez effectuer cette conversion suffisamment souvent pour que la commodité soit la bienvenue. Plus important encore, il n'y a aucun risque d'erreur comme vous obtenez avec les modifications manuelles décrites ici.Pour installer, démarrez l'exécutable Cygwin principal. C'est celui avec le nom comme setup-x86_64.exe ou quelque chose dans ce sens. Assurez-vous de voir un écran comme celui-ci:
Comme vous avez déjà effectué l'installation principale, vous devriez pouvoir cliquer sur Suivant jusqu'à ce que vous obteniez l'écran de sélection. Sélectionnez Complet dans la liste déroulante et entrez "dos2" dans la zone de recherche et choisissez l'outil comme indiqué ici:
Cliquez à nouveau sur Suivant et laissez l'installation se terminer. C'est ça. S'amuser. Cygwin, à l'exception de cet inconvénient occasionnel, est un package génial.
la source
Sinon dos2unix, il y a aussi 'flip'
$ flip -u votrefichier.txt
le retournera en utilisant les fins de ligne unix.
la source
J'utilise Notepad ++ pour modifier mes scripts bash (.sh) en me connectant au serveur par WinSCP
(pour configurer l'éditeur WinSCP sur Notepad ++: https://winscp.net/eng/docs/ui_editor_preferences )
C'est très pratique pour ouvrir des fichiers depuis des serveurs pour les éditer / enregistrer au lieu de l' éditeur " Vim ".
Lorsque vous ouvrez le fichier dans Notepad ++ , double-cliquez sur la 7e colonne dans la barre d'état en bas et sélectionnez " Unix (LF) ".
De plus, vous devez changer le 8ème en encodant -> Encoder en UTF-8 dans la barre supérieure.
la source
Vous n'avez pas besoin de modifier l'encodage de ligne du fichier réel pour que Cygwin's Bash fonctionne avec bonheur avec les encodages de fin de ligne Mac et Windows. Il y a une option que vous devez simplement activer.
Mettez simplement à jour votre
~/.bash_profile
contenuVoir https://ptolemy.berkeley.edu/projects/chess/softdevel/faq/5.html
la source