2016-08-28 2 views
0

J'ai une VM avec CentOS 6 et je charge quelques scripts de bashrc. Tout a bien fonctionné, mais je voulais copier-coller le même code et les mêmes scripts dans une ancienne sauvegarde de la même machine virtuelle, mais j'ai reçu une erreur: "fin de fichier inattendue". De même, la même erreur a dû affecter une autre personne lorsque je voulais partager ces scripts avec lui (il avait la même machine virtuelle).Comportement bizarre dans bashrc: concaténer, même code run/fail

donc j'ai commencé à déboguer un peu et a constaté que d'une ligne, il n'a pas aimé était (il a été l'analyse d'un tableau:

COUNTER=1  
while [[ ! -z ${SCRIPT[$COUNTER]} ]]; do 

De plus, il n'a pas aimé ce soit (ce n'est pas exactement même avec "tandis que" la logique, mais il fait le travail):

for i in ${Script[@]}; do 

alors, je l'ai remplacé avec:

for ((i = 0; i < ${#SCRIPT[@]}; i++)); do 

maintenant J'ai essayé d'obtenir le nom de l'erreur avec le même morceau de code et aucune autre erreur ne s'est produite.

J'ai aussi ce comportement qui est le plus étrange de tous: code:

BASH_SCRIPTS_LOCATION='/mnt/hgfs/Shared-workspace/scripts/' 
SCRIPT[0]='aliases.sh' 
SCRIPT[1]='scripts_config.sh' 
SCRIPT[2]='credentials.sh' 
SCRIPT[3]='other_functions.sh' 
SCRIPT[4]='ssh_functions.sh' 
SCRIPT[5]='release_functions.sh' 
SCRIPT[6]='test_functions.sh' 
for ((i = 0; i < ${#SCRIPT[@]}; i++)); do 
    loadedScript=${BASH_SCRIPTS_LOCATION}${SCRIPT[$i]} 
    echo -e "$loadedScript" 
done 

sortie Terminal (semble le « concaténer » il remplace les caractères à partir de mendiait de la première chaîne/variable:

aliases.shShared-workspace/scripts/ 
scripts_config.shworkspace/scripts/ 
credentials.shed-workspace/scripts/ 
other_functions.shorkspace/scripts/ 
ssh_functions.sh-workspace/scripts/ 
release_functions.shkspace/scripts/ 
test_functions.shworkspace/scripts/ 

Je pense que je me sers quelque chose de tout à fait inapproprié. Mais je ne sais pas quoi ou ce que je devrais rechercher.

Toute recommandation ou conseil est la bienvenue.

Merci!

+0

La dernière partie ressemble à des fins de ligne Windows. – choroba

Répondre

0

Il n'apparaît pas ici mais votre script a des caractères de retour chariot dans les lignes de définition du shell. Modifiez-les (en utilisant Notepad ++ par exemple ou tr -d "\015" <yourscript.sh> newscript.sh)

Vous pouvez rediriger votre script dans un fichier, vous verrez tout le texte dans le fichier.

Le chariot de retour chariot (asc 13, \r) réinitialise simplement le curseur sans passer à la nouvelle ligne. Chaque texte écrit après écrase le texte dans la ligne en cours. Windows l'utilise pour compléter le caractère de saut de ligne. Le mode texte Windows est comme ça

+0

Ah, sry, ce "test" était un test et je l'ai mal copié. Maintenant, c'est le bon code – softwareRat

+0

J'ai enlevé le code de la réponse. –

+0

Merci beaucoup, je viens d'utiliser "remplacer" dans gedit pour et tout fonctionne bien. Comportement très étrange ... pour sûr je m'en souviendrai n'importe quand. – softwareRat