[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Problème "basique" de scripting...



Hello,

On 09/08/2017 11:57 AM, David BERCOT wrote:

> if [ -e "/etc/apt/sources.list.d/*" ]
> then
>     rm /etc/apt/sources.list.d/*
> fi

Je ne suis pas sûr d'avoir compris comment était
ton code à l'origine mais je pense qu'il n'était
pas correct (ce qui ne l'a pas empêché de marcher
pendant un certain temps semble-t-il).

Avec les doubles quotes, tu demandes à bash de
tester si un fichier qui s'appelle * (avec vraiment
comme nom juste le caractère *) existe dans le
répertoire /etc/apt/sources.list.d/. Et on imagine
bien que ce n'est pas ce que tu veux demander à
bash.

Sans les doubles quotes, là le caractère * devient
spécial et bash le développe en fonction de ce qu'il
y a dans ton répertoire.

Par exemple si dans /etc/apt/sources.list.d/, tu as
titi.list et toto.list (et c'est tout) alors tout
va se passer comme si tu avais écris :

[ -e /etc/apt/sources.list.d/titi.list /etc/apt/sources.list.d/toto.list ]

et là tu as fort logiquement une erreur vu que -e
n'accepte _qu'un seul_ argument, pas plus. D'où le
message d'erreur que tu obtiens.

Si le répertoire ne contenait qu'un seul fichier, là
ça marcherait. En fait, sans les "...", le code marche
mais juste pour 0 ou 1 fichier dans le répertoire, pas
plus. :)

Perso, si je peux éviter les * dans un script, je le
fais, surtout pour du rm. À ta place je ferais plutôt ceci :

    find /etc/apt/sources.list.d/ -maxdepth 1 -mindepth 1 -type f -delete

voire, tant qu'on y ait :

    find /etc/apt/sources.list.d/ -maxdepth 1 -mindepth 1 -type f -name '*.list' -delete

J'espère que c'est plus clair pour toi maintenant.
À+

--
François Lafont


Reply to: