Script sous centos
Chertsey2011
Messages postés
26
Date d'inscription
Statut
Membre
Dernière intervention
-
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour à tous,
je cherche à écrire un script sous linux, qui me pose beaucoup de problème. Je dois créé un fichier prog.sh qui va ré-insérer la ligne package REPERTOIRE; pour chaque fichier (il y en a beaucoup) .java d'un REPERTOIRE
Exemple : le fichiers .java du répertoire jeu_uno devrait commencer par la ligne : package jeu_uno;
Pour réparer un projet, je dois exécuter mon script directement dans le même répertoire que les fichiers .java, p.ex:
cd jeu_uno/src/jeu_uno
cp ~/java.sh .
bash java.sh
Cela fait un moment que je suis bloqué, si une personne aurait une idéé de comment s'y prendre, me le dire serait très gentil.
Cordialement,
je cherche à écrire un script sous linux, qui me pose beaucoup de problème. Je dois créé un fichier prog.sh qui va ré-insérer la ligne package REPERTOIRE; pour chaque fichier (il y en a beaucoup) .java d'un REPERTOIRE
Exemple : le fichiers .java du répertoire jeu_uno devrait commencer par la ligne : package jeu_uno;
Pour réparer un projet, je dois exécuter mon script directement dans le même répertoire que les fichiers .java, p.ex:
cd jeu_uno/src/jeu_uno
cp ~/java.sh .
bash java.sh
Cela fait un moment que je suis bloqué, si une personne aurait une idéé de comment s'y prendre, me le dire serait très gentil.
Cordialement,
A voir également:
- Script sous centos
- Script vidéo youtube - Guide
- Mas script - Accueil - Windows
- Ghost script - Télécharger - Polices de caractères
- Script cmd - Guide
- Script download - Télécharger - Édition & Programmation
1 réponse
Salut Chertsey2011,
Tout d'abord, assures toi de bien disposer d'une copie des fichiers que tu veux traiter.. juste au cas où...
Ensuite, tu peux essayer ceci :
et voir si les fichier *.tmp sont créés comme tu le souhaites.
Si c'est bien le cas, tu peux supprimer les fichiers *.tmp, décommenter les lignes 10 et 11 ci-dessus et exécuter le script dans le répertoire concerné.
Dal
Tout d'abord, assures toi de bien disposer d'une copie des fichiers que tu veux traiter.. juste au cas où...
Ensuite, tu peux essayer ceci :
#!/bin/bash CURR_DIR="$(pwd | sed "s/.*\///")" JAVA_PKG="package $CURR_DIR;\n" for JAVA_FILE in *.java; do JAVA_FILE_TMP="$JAVA_FILE.tmp" echo "processing $JAVA_FILE as $JAVA_FILE_TMP" echo -e $JAVA_PKG | cat - $JAVA_FILE > $JAVA_FILE_TMP #echo "renaming $JAVA_FILE_TMP to $JAVA_FILE" #mv $JAVA_FILE_TMP $JAVA_FILE done
et voir si les fichier *.tmp sont créés comme tu le souhaites.
Si c'est bien le cas, tu peux supprimer les fichiers *.tmp, décommenter les lignes 10 et 11 ci-dessus et exécuter le script dans le répertoire concerné.
Dal
;-(
devrait suffire ;-))
la description est un peu vague.
je préfère , car il retourne le chemin absolu.
et je préfère que les scripts contiennent des chemins absolus.
en ayant précédé l'exécution du script d'un , c'est tout.
il n'y a pas quelque part parmi les best practices un passage sur les préférences à adopter en ce qui concerne les chemins indiqués dans les scripts ?
sinon, et/ou s'il insiste, en :
MAIS, cela sous-entend qu'il y a eu un dans le script; ce qui est le plus souvent inutile, et source d'erreurs : "est-ce que je suis ici ? ou là ? ou où ?" :)
J'ai commencé ma réponse à ce topic alors qu'il était initialement posté sur le forum Programmation, et le temps que je poste la réponse, il a été déplacé par un modérateur ici, qui est, sans doutes l'endroit le plus approprié (bein qu'il y ait des sous-forums "batch" et "powershell" pour Windows, il n'y en a pas pour Bash ou autres shells).
C'est sympa de retrouver les anciens du forum Linux et les moins anciens :-)
Sur ma proposition en ligne 3 du script, c'est mon réflexe de programmeur Perl que de vouloir utiliser les regexp pour résoudre tous les problèmes :-) et il y a bien sûr les deux solutions tout à fait adaptées que vous décrivez pour obtenir le nom du répertoire courant, qui sont plus directes.
Sur les autres aspects de votre échange :
- Chertsey2011 indique très clairement qu'il veut que son script opère sur un seul répertoire et qu'il doit exécuter le script directement dans le même répertoire où se trouvent les fichiers .java qu'il veut retraiter, comme le montre aussi son scénario d'usage
- Chertsey2011 veut uniquement le nom du répertoire courant à l'exclusion d'autres chose pour "réparer" son projet Java dans un répertoire en insérant cette information dans une directive
Par rapport à sa spécification, j'ai seulement pris la liberté d'insérer, en plus de la ligne souhaitée, un saut de ligne, qui est un style habituel en Java pour séparer visuellement cette première ligne d'autres directives d'import qui peuvent suivre ou des déclarations de classes.
Selon ma compréhension, c'est un quick-and-dirty hack pour résoudre un problème ponctuel de "réparation" de code que veut Chertsey2011 sur un répertoire donné, et pas un nécessairement un script pour de multiples usages à venir, ou devant avoir un niveau de contrôle et de sécurisation passant des certifications aéronautiques pour piloter un Airbus ;-)