et il faut qu'on devine ce que tu as vu ?
poste à nouveau ton code quand tu lui apportes des modifications.
Il ne s'agit pas de deviner mais de savoir si vous pensez comme moi que ce script présente quelques lacunes voir carrément un bug !
Dernière révision (mais rien n'a changé à part le pipefail et qq commentaires supplémentaires) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71 #!/bin/bash # -e : Interruption immédiate qd erreur # -u : Interdit le référencement des variables non définies # -o : Permet d'activer (-o) ou de désactiver (+o) des options # pipefail : Pour que le code de statut soit cohérent avec l'erreur # noclobber : Pour interdire le remplacement de fichier s'ils existent set -euo pipefail # Internal Field Separator IFS=$'\n\t' # Script vars readonly actiondir="/etc/cron-apt/action.d" readonly preferencesfile="/etc/cron-apt/config.d/preferences" readonly configfile="/etc/cron-apt/config" # Menage echo "Suppression des anciennes configurations" find -0 "${actiondir}" -type f | xargs rm -f if [ -f "${preferencesfile}" ]; then rm -f "${preferencesfile}" ; fi # Debut du programme echo "Merci de specifier le type de profile à installer (full / security)" read profile # En fonction du profil choisi, on applique telle ou telle conf case "${profile}" in "full") echo "Creation de la regle full" # Creation de la règle full echo "autoclean -y" > "${actiondir}/0-FullProfile" echo "dist-upgrade -y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold -o APT::Get::Show-Upgraded=true" >> "${actiondir}/0-FullProfile" echo "autoremove --purge" >> "${actiondir}/0-FullProfile" echo "Update du fichier config pour prendre en compte le ACTIONDIR" # Modification du fichier config pour prise en compte de ce param ;; "security") echo "Blocage des paquets kernel tagues *linux-image*" # On bloque les packages kernel pour pas les upgrade echo "Package: dovecot* galera* glusterfs* haproxy* heartbeat* libc6* mariadb* mysql* postfix* proxmox* pve-* qemu-* linux-headers* linux-image* linux-libc*" > "${preferencesfile}" echo "Pin: release *" >> "${preferencesfile}" echo "Pin-Priority: -1" >> "${preferencesfile}" echo "Creation de la source list dediee securite" grep -i security /etc/apt/sources.list > /etc/apt/sources.list.d/security.sources.list echo "Menage dans /etc/apt/sources.list" sed -i "/security/d" /etc/apt/sources.list echo "Creation de la regle security" # Creation de la règle security echo "autoclean -y" > "${actiondir}/0-SecurityProfile" echo "upgrade -y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold -o APT::Get::Show-Upgraded=true -o Dir::Etc::SourceList=/etc/apt/security.sources.list" >> "${actiondir}/0-SecurityProfile" echo "upgrade -y telegraf grafana" >> "${actiondir}/0-SecurityProfile" echo "autoremove --purge" >> "${actiondir}/0-SecurityProfile" ;; *) echo "Parametre incorrect, vous devez entrer soit full soit security" exit 1 ;; esac # Configuration globale # Ajout d'apt en commande de reference # Ajout des preferences d envoi de mail echo "PTCOMMAND=/usr/bin/apt MAILTO=\"***\" MAILON=\"upgrade\" RUNSLEEP=600" > "${configfile}"
Ta commande find n'est pas valide, je pense que tu t'es laissé induire en erreur par le post #4.
La bonne manière de faire est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part find "$actiondir" -type f -print0 | xargs -0 rm -f
Voilà du concret
Merci Balkany
Et effectivement je n'ai pas compris le coup du find.
C'est corrigé.
Des idées sur le fond ?
Certaines remarques qui ont déjà été faites et pas (pleinement) intégrées :
- tester l'existence d'un fichier avec rm -f est inutile : c'est soit test -f fichier && rm fichier, soit rm -f fichier ;
- tu devrais appliquer les recommandations faites au sujet d'echo aussi dans le case esac : c'est mieux au niveau performances, plus agréable à lire et moins source d'erreurs à l'écriture du code.
Mais plus fondamentalement, je pense que les accolades autour des noms de variables ne devraient être utilisées que lorsqu'elles servent à quelque chose
(bien que j'avais déjà lu les recommandations des devs google que tu as citées précédemment, et que je les avais trouvées pas mal, dans l'ensemble)
J'aime bien la phrase (que personne n'a encore citée) : "On ne met pas d'accolades s'il n'y a rien d'accolé".
Quant à ton script, en substance, tu fais des conditions et des messages à l'utilisateur. Passablement inintéressant. Je ne sais même pas pourquoi tu nous sollicites. En shell, on peut être coincé par la modification de fichiers texte, les redirections, les conduites mal fagotées, etc. Mais dans ton cas, je ne vois aucun sujet.
Cela dit, dans un petit village gaulois, on trouve toujours des sujets de discorde pour s'envoyer du poisson pas frais en travers de la face.
Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.
Pù#@*$ bah ça en aura fait couler de l'encre ces accolades !!!
Et je pense que s'il y a bien un truc inutile, c'est bien ce débat.
C'est comme les espaces qui précèdent ou suivent les parenthèses, les accolades, le signe égal, ...
Certains les mettent d'autres pas...
Moi la technique de zipe31 me va très bien, je trouve ça plus propre.
Je l'adopte mais je n'essaye pas de convaincre qui que ce soit sur ce forum que c'est la bonne manière de faire.
Et vous devriez faire pareil.
Je vais bosser sur les echo.
Ca va revenir à stocker des chaines (les contenus) et de les écrire en une seule fois à la fin du script.
Mais que pensez-vous du ménage qui est fait systématiquement (ligne 19 à 21) ?
Qui laisserait le système dans un état "instable" si on décidait d'annuler (CTRL+C) ou dans le cas d'un case non géré ?
Et de la création du fichier préférence (ligne 42 à 44) mais qui n'est pas utilisé en ligne 55 ?
Apparemment, les deux sens sont possibles oui : https://en.wiktionary.org/wiki/Googler.
Mais étant donné la teneur et le style du document, son origine : https://github.com/google/styleguide, je pense que ça ne fait guère de doutes qu'il s'agit bien des devs.
ah, oui.donc, il s'agit d'une convention interne pour les projets initiés par Google.Style guides for Google-originated open-source projects
vivement qu'ils trouvent plus lisible de mettre des point-virgules à la fin de chaque ligne.
Si on va par là, pourquoi ne pas faire directement:
ou
Code : Sélectionner tout - Visualiser dans une fenêtre à part find "$actiondir" -type f -exec rm -f {} \;
Code : Sélectionner tout - Visualiser dans une fenêtre à part find "$actiondir" -type f -exec rm -f {} \+
Cordialement.
Oui, ou bien utiliser -delete.
Quand je disais « la bonne manière de faire », c'était plutôt « la bonne manière de comprendre » l'indication de shellcheck mal comprise au post #4 :
^-- SC2038: Use -print0/-0 or -exec + to allow for non-alphanumeric filenames.
T'a oublié les accolades
Nan mais j'déconne
Un peu subtile pour être compris par le néophyte que je suis !
Quelle différence entre la fin de ligne avec un "+" ou un ";" ?
En revanche je pense avoir compris le coup du "delete" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part find "${actiondir}" -type f -delete
Oui, j'ai dû me gourrer quelque part.
J'ai compris ça comme ça :
ou
Code : Sélectionner tout - Visualiser dans une fenêtre à part ^-- SC2038: Use -print0 to allow for non-alphanumeric filenames.
ou
Code : Sélectionner tout - Visualiser dans une fenêtre à part ^-- SC2038: Use -0 to allow for non-alphanumeric filenames.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ^-- SC2038: Use -exec + to allow for non-alphanumeric filenames.
Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peut–être qu'il peut être sûr, etc.
Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
Mes 2 cts,
--
jp
Cordialement.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager