[Shell Unix] Variable qui ne se redefinie pas
Résolu
Rafael89
-
Rafael89 -
Rafael89 -
Bonjour,
Je deviens fou avec mon problème. Ce doit être gros comme une maison, mais impossible de trouver. J'ai déjà trouvé beaucoups de réponses sur ce forum, alors si quelqu'un peu m'aider ...
Contexte :
Dans un script shell sous Linux, avant de copier des fichiers, je vérifie que ces fichiers ne sont pas déjà présent dans le répertoire de destination. Je fais une simple double boucle (pas très original, je sais). Pour chaque fichier de mon répertoire de destination, je fais une boucle dans mon repertoir d'origine et je redéfini une variable BOUBLONS à "o" si deux fichiers sont identiques.
Problème :
La variable DOUBLONS ne passe jamais à "o". L'affichage indique toujours "n".
La ligne echo "Fichier déjà sur le disque USB : $FICHIER" fonctionne bien.
Si je redefinie DOUBLONS après la boucle, cela fonctionne.
Mon code :
Je deviens fou avec mon problème. Ce doit être gros comme une maison, mais impossible de trouver. J'ai déjà trouvé beaucoups de réponses sur ce forum, alors si quelqu'un peu m'aider ...
Contexte :
Dans un script shell sous Linux, avant de copier des fichiers, je vérifie que ces fichiers ne sont pas déjà présent dans le répertoire de destination. Je fais une simple double boucle (pas très original, je sais). Pour chaque fichier de mon répertoire de destination, je fais une boucle dans mon repertoir d'origine et je redéfini une variable BOUBLONS à "o" si deux fichiers sont identiques.
Problème :
La variable DOUBLONS ne passe jamais à "o". L'affichage indique toujours "n".
La ligne echo "Fichier déjà sur le disque USB : $FICHIER" fonctionne bien.
Si je redefinie DOUBLONS après la boucle, cela fonctionne.
Mon code :
DOUBLONS="n" find "$targetDir/$backupDir$DATE" -type f | while read A ; do FICHIER=${A##*\/} find . -type f | while read B ; do FICHIER2=${B##*\/} if [ "$FICHIER" == "$FICHIER2" ]; then echo "Fichier déjà sur le disque USB : $FICHIER" DOUBLONS="o" fi done done echo "DOUBLONS = $DOUBLONS"
A voir également:
- [Shell Unix] Variable qui ne se redefinie pas
- Classic shell - Télécharger - Personnalisation
- Classic shell c'est quoi ✓ - Forum Windows 10
- Fichier executable unix ✓ - Forum MacOS
- Vba excel sélectionner une plage de cellules variable ✓ - Forum VB / VBA
- Shell addition ✓ - Forum Shell
2 réponses
hello
parce que DOUBLONS est modifiée dans une tâche enfant à cause du find ...| et donc n'est pas modifiée dans la tâche appellante.
x vaut toujours 1
par contre
x vaut 2
parce que DOUBLONS est modifiée dans une tâche enfant à cause du find ...| et donc n'est pas modifiée dans la tâche appellante.
x=1 find . -ls | while read fichier ; do x=2 done echo $x
x vaut toujours 1
par contre
x=1 find . -ls | (while read fichier ; do x=2 done echo $x)
x vaut 2
Merci bubcek,
J'ai compris. C'est un problème de persistance des variables. Je début en script shell, je suis plus habitué au C++.
Dans mon cas, comme j'ai deux boucles inbriquées avec chacune un pipe, ça ne fonctionne pas. Mais connaissant le problème, je peu rechercher sur le web d'autres solutions.
Merci pour ta rapidité
J'ai compris. C'est un problème de persistance des variables. Je début en script shell, je suis plus habitué au C++.
Dans mon cas, comme j'ai deux boucles inbriquées avec chacune un pipe, ça ne fonctionne pas. Mais connaissant le problème, je peu rechercher sur le web d'autres solutions.
Merci pour ta rapidité