Exécution du script Linux Shell sur un environnement Windows

J’ai essayé d’exécuter un script shell Linux sur une machine Windows. pour exécuter le script sur un environnement Windows, j’ai sélectionné Cygwin.

Lorsque j’ai commencé à exécuter le script avec cygwin, j’ai d’abord rencontré le problème suivant.

line 12: $'\r': command not found 

mais le numéro de ligne 12 n’a aucune commande

  08 # 09 ###################################################################### 10 #### PARAMETERS TO SET BEGIN 11 ###################################################################### 12 13 # archive setttings 14 ARCHIVE_USER=abc # archive storage user name (default) 15 ARCHIVE_GROUP=app # archive storage user group (default) 16 ARCHIVE_PATH=/test/file # archive storage directory (default) 17 ARCHIVE_DELAY=+8 

Pour résoudre ce problème, utilisez la commande dos2unix et générez de nouveaux scripts shell à partir de l’ancien

quand je lance ce script nouvellement généré, il renvoie à nouveau une erreur

 housekeeper.sh: 2: Syntax error: newline unexpected 

Voici le script généré par dos2unix.

 >#!/bin/bash >># >># Date : 2012-03-22 (yyyy-mm-dd) 

Quelqu’un pourrait-il m’expliquer ce qui ne va pas avec la ligne numéro 2 ici.

Merci d’avance pour votre aide

Voici le haut du script que j’essaye de lancer, c’est le script que je reçois après la conversion en utilisant la commande dos2unix

 >#!/bin/bash >># >># Date : 2012-03-22 (yyyy-mm-dd) >># Modified by : ABC >># Goal : Draft version for X house keeping environment >># >># Description : This script perform housekeeping of XYS products. >># >>###################################################################### >>#### PARAMETERS TO SET BEGIN >>###################################################################### >> >># archive setttings >>ARCHIVE_USER=user1 # archive storage user name (default) >>ARCHIVE_GROUP=gapp # archive storage user group (default) >>ARCHIVE_PATH=/product/file # archive storage directory (default) >>ARCHIVE_DELAY=+8 # archive files older than delay (in days) >> >># purge setttings >>PURGE_DELAY=+30 # purge files older than delay (in days) 

Cela ressemble à un problème de terminaison de ligne (Windows utilise Carriage Return, Linefeed et Unix utilise uniquement Linefeed). Vous pouvez corriger ces problèmes en utilisant dos2unix (et unix2dos ), qui convertit les terminateurs de ligne.

Essayer:

 $ dos2unix myscript.sh 

Il semble également que votre script ait un “>” au début de chaque ligne.

Cela ne marche pas.

Votre première ligne doit être #!/bin/bash , pas >#!/bin/bash .

Pour supprimer les caractères ‘>’, essayez la commande suivante:

 sed -i.bak 's/^>*//' housekeeper.sh 

(en supposant que votre script s’appelle housekeeper.sh).

Cela fera une copie de sauvegarde de votre script avec une extension .bak , et supprimera tous les signes supérieurs à chaque ligne du fichier.