Recherches ocurrences dans les dernières lignes

S’il a besoin de droits root pour tourner (ne serait-ce que pour monter les partitions j’imagine ? je l’ai pas vraiment en tête en entier et j’ai pas trop le cœur à le décortiquer à cet instant précis…) alors ça serait peut-être judicieux, oui, car on se heurte au même principe.

Cela dit vu la taille du script et le peu d’utilisations de sudo, ptêt pas la peine d’enlever les sudo… Un déplacement vers /usr/local/bin + chown root:root + chmod 755 ça devrait suffire. Le problème de sécurité ne tient pas à l’utilisation du sudo dans le script, mais aux droits d’écriture que les utilisateurs ont sur ce script alors qu’il va exécuter des commandes root.
Autrement dit, à partir du moment ou un script lance des commandes root (peu importe la manière, soit en l’appelant directement de root / sudo, soit avec quelques sudo parsemés dans le script) il faut faire en sorte que seul root puisse modifier ce fichier.

J’ai rajouté le lien dans mon message précédent.
Oui à ta question :

sudo mount -t "${systeme_fich[$index]}" "${ddext[$index]}" "${mount_rep}"

Je vais le faire demain :006

Juste à titre informatif :
La ligne contenant exit -1 et inutile et ne sera jamais exécutée. En effet, exec (lorsqu’il n’est pas utilisé pour manipuler les flux) remplace le processus courant par l’exécution de ce qu’on lui donne en argument (dans le cas présent sudo $0).

[quote=“Totor”]Juste à titre informatif :
La ligne contenant exit -1 et inutile et ne sera jamais exécutée. En effet, exec (lorsqu’il n’est pas utilisé pour manipuler les flux) remplace le processus courant par l’exécution de ce qu’on lui donne en argument (dans le cas présent sudo $0).[/quote]
Sauf quand il n’arrive pas à le faire. Mais tu as raison, j’avais oublié le set -e plus haut.

J’arrive aprés la bataille, mais on peut faire l’edition du fichier /etc/apt/preferences directement en une commande:

Le premier motif : /^Explanation:/
Le deuxième " : /G/ --> fin du fichier (vi)
commande : /d --> delete

supprime toutes les lignes à partir de motif1 jusqu’à motif2

Bien sur il n’y a plus le fichier /etc/apt/preferences~ de secours mais je crois qu’il y a une option de sed qui permet de faire ça.

Ça n’enlève rien à l’intérêt des autres solutions mais c’est ce qu’il y a de + court, je pense

Excellent merci beaucoup pour ta solution, je ne connaissais pas du tout.
L’option dont tu parle s’utilise ainsi :

[quote=“MisterFreez”]Excellent merci beaucoup pour ta solution, je ne connaissais pas du tout.
L’option dont tu parle s’utilise ainsi :

sudo sed -i~ "/^Explanation:/,/G/d" /etc/apt/preferences

Voilà :023 il me semblait bien que ça existait !

Yes, moi aussi j’apprends pas mal en vous lisant, ça fait un bail que je me dis que je dois me mettre à awk, parce qu’il sait tout faire, lui, d’un autre coté pas possible de passer à coté des autres commandes parce qu’elles sont souvent utilisées dans des scripts ou plus simples suivant les cas, donc faut tout savoir … ce qui est mon cas :liar: bien sûr !

@MisterFreez : j’avais pas vu le set -e :blush: :laughing:

[quote=“Rantanplan aussi !”][quote=“MisterFreez”]Excellent merci beaucoup pour ta solution, je ne connaissais pas du tout.
L’option dont tu parle s’utilise ainsi :

[code][…]ça fait un bail que je me dis que je dois me mettre à awk, parce qu’il sait tout faire, lui[…][/quote][/quote]
malheureusement non ! :018 je trouve qu’il manque cruellement de l’équivalent de l’option -i de sed :12

Merci pour cette nouvelle approche mais je voudrais savoir à quoi correspond la virgule :question:

EDIT : j’ai des problèmes d’affichage, le gras n’est plus perçu ???
avant que je fouille, est-ce la partie /,/ ci-dessus vous apparaît bien en gras ?

[quote=“ricardo”]Merci pour cette nouvelle approche mais je voudrais savoir à quoi correspond la virgule :question:

Ca signifie : de la ligne correspondant au motif ^Explanation: jusqu’à celle correspondant au motif G. Le d (pour delete) correspond à l’action que sed doit effectuer sur ces lignes

[quote=“ricardo”]EDIT : j’ai des problèmes d’affichage, le gras n’est plus perçu ???
avant que je fouille, est-ce la partie /,/ ci-dessus vous apparaît bien en gras ?[/quote]
Oui

Merci, pour les autres motifs, l’explication avait déjà été donnée mais comme je n’avais jamais vu une virgule comme une … commande (?), je préférai avoir confirmation.
Autrement dit : , = “jusqu’à”.

Une question subsidiaire me vient : si, au lieu de fixer l’arrivée à la fin du fichier, on veut définir la plage avant, je suppose qu’à l’emplacement du ‘G’, on peut définir un autre début de ligne, genre :

essai gras

[quote=“ricardo”]Une question subsidiaire me vient : si, au lieu de fixer l’arrivée à la fin du fichier, on veut définir la plage avant, je suppose qu’à l’emplacement du ‘G’, on peut définir un autre début de ligne, genre :

Probablement, tente :slightly_smiling:

Ben oui, ça fonctionne et je t’interdis de m’appeler “tente” :unamused:
:laughing: :laughing: :laughing:

[quote=“ricardo”]Ben oui, ça fonctionne et je t’interdis de m’appeler “tente” :unamused:
:laughing: :laughing: :laughing:[/quote]
:stuck_out_tongue: :stuck_out_tongue: :stuck_out_tongue:

Blagues à part, la commande que j’avais donnée initialement est fausse :

sudo sed -i "/^Explanation:/,/G/d" /etc/apt/preferences

En fait comme je ne savais pas dire à sed “jusqu’à la fin du fichier” j’avais pensé à la commande G de vim (drôle d’idée, mais Rantanplan …), et ça marche uniquement parce que sed ne trouve en l’occurence aucun “G” jusqu’à la fin du fichier … donc il supprime ligne aprés ligne jusqu’à rencontrer la fin du fichier et il s’arrête ( manquerait plus qu’il continue !)

J’ai cherché un peu sur le net sans vraiment trouver comment indiquer à sed l’adresse fin de fichier. (ça doit bien exister, pas le temps de suite …)

Enfin, c’est pas bien grave, il suffit de donner à sed une expression régulière qu’il ne trouvera pas et il supprimera à partir du motif1 jusqu’à la fin du fichier, comme par exemple :

sed -i~ "/^Explanation:/,/Ma grand-mère courre + vite qu\' Usain Bolt/d" /etc/apt/preferences

Et faire des tests (sans -i ) comme le sugère MisterFreez, rien ne les remplace … la preuve ( d’où aussi l’intérêt de l’option -i~ de sed )

@Totor oui awk -i aurait été bien, peut être qu’il y a des versions d’awk qui le font, en tout cas je pense qu’il y des traitements complexes que l’on ne peut faire qu’avec awk, c’est ce que je voulais dire, enfin c’est pas grave !

Je trouve qu’investir dans python est de + en + tentant ( :mrgreen: ) pour tout faire, mais c’est se couper de la compréhension des scripts ordinaires, que faire ? tout savoir, bien sûr ! :017

Au plaisir de vous lire :023

EOF, non ?

Bon, je viens de lancer le man de sed la fin de fichier en principe c’est $, mais je n’ai pas trouvé comment s’en servir donc le plus simple c’est de faire l’inverse (n’afficher aucune ligne sauf de la première à la dernier qui ne commence pas par “Explanation:”) :

C’est testé.

Oui mais toutes ne seraient pas éliminées alors car toutes les lignes ne commencent pas par ‘Explanation:’ ?
Voici comment se présente 2 paquets épinglés :

[code]Explanation: Pinned by apt-listbugs at Sat Oct 22 01:11:23 +0200 2011
Explanation: #642572: liblucene2-java: cross dependencies prevent the installation of eclipse-cdt
Package: liblucene2-java
Pin: version 2.9.4+ds1-2
Pin-Priority: 1000

Explanation: Pinned by apt-listbugs at Sat Oct 22 01:11:23 +0200 2011
Explanation: #582952: dash / LINENO-support lets many package FTBFS
Package: dash
Pin: version 0.5.7-1
Pin-Priority: 1000
[/code]

Non, la virgule signifie (depuis)[size=150],/size

Par contre selon le test que je viens de faire, la toute première ligne “Explanation” reste dans le fichier final (en l’occurrence j’ai testé avec Pin, mais ça revient au même) :

[code]$ sed -n ‘0,/^Pin:/p’ /etc/apt/preferences
################################################

BUG XORG 1.11, rester en 1.10

Package: xserver-common xserver-xorg-core
Pin: version 2:1.10.4-1[/code]
Pour utiliser cette commande là il faudrait peut-être plutôt se rabattre sur un marqueur fixe, genre commentaire « # DEBUT DES PINNINGS APT-LISTBUG » ce qui donnerait :

@MisterFreez :
Yes, le man de sed, le bon reflexe, j’y ai même pas pensé ! je cherchais sur le net comme un gros flemmard qui veut pas réfléchir 5 secondes … J’ai été surpris de sa “courtesse”. J’arrive pas non plus à me servir de $ comme fin de fichier ? (une piste est peut-être l’utilisation des " " au lieu de ’ ’ ce qui fait que le shell considère le $ spécialement ?) Mais ta commande fonctionne bien, sauf que ^Explanation: est conservé, ce qui est normal, est-ce gênant ? sinon ya plein d’exemple là par exemple lipn.fr/~cerin/SE/sed.html

@Ricardo:
Tu devrais aller voir l’organigrame du fonctionnement de sed : commentcamarche.net/faq/9536 … sed-part-i

@Syam:
Comme tu le dis toi même : (depuis),(jusqu’à)
Donc c’est normal que la ligne (jusqu’à) reste.Tu as l’air de bien aimer les marqueurs fixes ! :stuck_out_tongue:

J’fais surtout ce que je peux avec ce que j’ai… :wink:
Si la commande laisse la dernière ligne dans le fichier, vaut mieux que celle-ci soit fixe pour éviter que le fichier ne contienne une ligne Explanation inutile, ça reste plus propre comme ça non ? :mrgreen: