|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité régulier
![]() Inscription : février 2007 Messages : 44 ![]() |
Bonjour,
voila j'ai realisé un petit script shell qui permet, en passant 2 repertoire en argument, de les comparer et de renvoyer un code annonçant s'ils sont identique ou non (dans leur contenu aussi). Le probleme est que j'ai besoin de me deplacer dans les repertoire dans le script, et que ça me renvoi cette erreur "can't cd to..." Voici mon code : Code :
Si quelqu'un connait une solution ou une alternative merci d'avance ![]() ++ |
||
|
10
|
|
|
#2 | |||
![]() ![]() R&D en systemes informatiques bas niveau Unix/Linux Inscription : mai 2004 Messages : 5 499 ![]() |
Bonjour,
Citation:
Tu es maintenant dans $rep1, et tu cherches à faire : cd $rep2 Ca ne peut pas fonctionner, puisque $rep2 n'est pas forcément inclus dans $rep1 Pour débugger ton script, je te conseil d'ajouter, en tant que première ligne :Ensuite, mets des 'pwd' un peu partout, ça te montrera que tu as des soucis de répertoire. Par la suite, tu déplaceras le set -x plus bas dans ton script, là où tu as un soucis. Ah oui, un dernier point : un script commence par le shell qu'il utilise, avec par exemple la syntaxe suivante, en supposant que tu utilises bash : |
|||
|
|
20
|
|
|
#3 | ||||
|
Membre émérite
![]() ![]() Inscription : octobre 2004 Messages : 668 ![]() |
Code :
Ca crée deux fichiers temporaires dans /tmp (donc suppose un droit en écriture), récupère dans chacun de ces fichiers le contenu de chaque répertoire (excepté le nom du répertoire lui même, qui peut être différent, d'où le sed 1d). Dans chaque fichier, on récupère le chemin complet de chaque sous répertoire et fichier Si par exemple j'ai Citation:
Citation:
Tel quel, le script retourne directement la valeur de diff, donc 0 si OK, 1 sinon. Il faudrait rajouter des contrôles sur les paramètres, éventuellement supprimer les fichiers temporaires, etc. Et modifier find si tu veux chercher de façon plus fine, bien sûr. Je me contente de te montrer une base potentielle Pose des questions si tu ne comprends pas. <edit> Petit conseil supplémentaire : plutôt que d'utiliser cd dans les scripts, je te conseille fortement le couple pushd/popd plus facile à gérer
__________________
Software becomes slower faster than hardware becomes faster http://xrenault.developpez.com API C standard (C ANSI ) |
||||
|
|
20
|
|
|
#4 |
|
Invité régulier
![]() Inscription : février 2007 Messages : 44 ![]() |
ok, c'etait donc une simple erreur de logique. Merci ^^
Ma solution : path=`pwd` au debut du script ; cd $path avant chaque cd ; ça marche |
|
00
|
|
|
#5 | |
|
Nouveau Membre du Club
![]() Inscription : janvier 2010 Messages : 291 ![]() |
Citation:
|
|
|
|
10
|
|
|
#6 | |||||
|
Expert Confirmé Sénior
![]() Frédéric Ingénieur développement logiciels Inscription : février 2006 Messages : 3 057 ![]() |
Citation:
Les $1 $2 $3 $4 ... (jusqu'à $9) correspondent aux arguments du script. Si tu lances le script de cette manière: script toto titi tata<return> alors $1 contiendra toto, $2 contiendra titi et $3 contiendra tata. Cette affectation est faite automatiquement par le shell donc tu n'as pas besoin de les définir, mais seulement de les utiliser si tu en as envie/besoin. On les nomme les "paramètres positionnels". Les accolades servent à isoler le nom de la variable en cas d'ambigüité possible. Exemple Code bash :
Pour éviter ce pb, on encapsule le nom de la variable avec des accolades Code bash :
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche. Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit. Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant. Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation. Dr. Adrian Rogers, 1931 |
|||||
|
|
20
|
|
|
#7 |
|
Expert Confirmé
![]() Inscription : janvier 2011 Messages : 971 ![]() |
Salut,
Et au-delà si tu les entoures avec des accolades ${10}, ${25}, ${101}, etc.
__________________
$ man woman Il n'y a pas de page de manuel pour woman. |
|
|
10
|
|
|
#8 |
|
Expert Confirmé Sénior
![]() Inscription : février 2008 Messages : 2 076 ![]() |
il ne faut pas utiliser ce code (for elem in `commande`; do), c'est générateur d'erreur.
Si ce que retourne la commande contient un espace, la boucle for itérera sur chaque élément retourné. find peut se suffire à lui-même, en utilisant l'option -exec, ou en pipant sa sortie vers xargs |
|
|
20
|
|
|
#9 |
|
Membre actif
![]() Inscription : août 2011 Messages : 44 ![]() |
Bonjour,
Pourquoi ne pas utiliser tout simplement diff ? |
|
|
10
|
|
|
#10 | |
|
Expert Confirmé Sénior
![]() Frédéric Ingénieur développement logiciels Inscription : février 2006 Messages : 3 057 ![]() |
Citation:
Oui, diff ou dircmp. Mais bon, le topic date de 2007 et l'auteur (qui voulait peut-être juste s'exercer) a dû l'oublier depuis donc je ne pense pas que tu auras de réponse à ce sujet. Et là on répondait juste à bigs3232 sur une question de syntaxe...
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche. Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit. Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant. Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation. Dr. Adrian Rogers, 1931 |
|
|
|
10
|
|
|
#11 | |
|
Membre actif
![]() Inscription : août 2011 Messages : 44 ![]() |
Citation:
|
|
|
|
10
|
|
|
#12 | |
|
Expert Confirmé
![]() Inscription : janvier 2011 Messages : 971 ![]() |
Citation:
__________________
$ man woman Il n'y a pas de page de manuel pour woman. |
|
|
|
00
|
|
|
#13 | |
|
Expert Confirmé Sénior
![]() Frédéric Ingénieur développement logiciels Inscription : février 2006 Messages : 3 057 ![]() |
Ben oui, parfois certaines personnes travaillent dans des environnements plus restrictifs/anciens et tous n'ont pas forcément la chance d'avoir du bash
![]() Citation:
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche. Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit. Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant. Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation. Dr. Adrian Rogers, 1931 |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com