Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 09/12/2020, à 02:23

cristobal78

(résolu) voir rapidement si un paquet est installé ou non

Bonjour à tous

parfois et même souvent on ne se souvient plus si un paquet donné est bien installé sur le PC.
Bien sur on peut toujours taper son nom dans un terminal et voir que ça ne marche pas ou bien on peut lancer synaptic et faire une recherche
mais j'ai choisi pour m'amuser d'écrire un petit script pour ça.
Le voici :

#!/bin/bash
saisie="Saisie manuelle du nom partiel ou complet du paquet cherché"
liste="Liste des paquets correspondants à la chaîne de car. saisie"

paquet=$(zenity --entry --title=""  --text "$saisie")

# dpkg-query -l | grep -E "^.i *$paquet" | zenity --width=800 --height=200 --list --title="" --text="*** RÉSULTATS ***" --column="$liste"

dpkg-query -l | grep -E "^.i" > liste	# liste les lignes dont le 2-ème car. est un "i"
cat liste | grep "$paquet" | zenity --width=800 --height=200 --list --title="" --text="*** RÉSULTATS ***" --column="$liste"
rm liste

Mes questions sont :

- est ce que ce script répond bien à la question ?
- est ce que la ligne ici commentée par # dpkg-query ...   donnera exactement le même résultat ?

Dernière modification par cristobal78 (Le 10/12/2020, à 00:44)


Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE

Hors ligne

#2 Le 09/12/2020, à 02:46

beuguissime

Re : (résolu) voir rapidement si un paquet est installé ou non

Bonsoir,

Pour éviter un fichier tampon, tu peux remplacer les trois dernières lignes par ça

dpkg-query -l | grep -E "^.i.*${paquet}.*" | zenity --width=800 --height=200 --list --title="" --text="*** RÉSULTATS ***" --column="$liste"

Dernière modification par beuguissime (Le 09/12/2020, à 12:53)

Hors ligne

#3 Le 09/12/2020, à 02:51

nany

Re : (résolu) voir rapidement si un paquet est installé ou non

Bonjour,



cristobal78 a écrit :

- est ce que ce script répond bien à la question ?

Oui à part que ça renvoie du vide si le paquet n’est pas installé.

cristobal78 a écrit :

- est ce que la ligne ici commentée par # dpkg-query ...   donnera exactement le même résultat ?

A priori, oui.

cristobal78 a écrit :
cat liste | grep "$paquet"

Ça tue des bébés chats inutilement. mad

man grep

En ligne

#4 Le 09/12/2020, à 07:04

Compte supprimé

Re : (résolu) voir rapidement si un paquet est installé ou non

Bonjour,
Perso je me contente de:

apt search nom_du_paquet

...

#5 Le 09/12/2020, à 10:58

cristobal78

Re : (résolu) voir rapidement si un paquet est installé ou non

salut
décidément il y a des "couche-tard" sur le forum.  big_smile
Merci pour tous vos commentaires que j'ai lus avec attention.

@ pseudofab
j'ai testé mais ce qui sort n'est pas très "esthétique" et il y a bcp de lignes

@ nany
merci d'avoir confirmé qu'on obtient bien le même résultat*.
Je n'ai pas compris l'allusion" aux chats (ou alors "cat" ?) car en effet si je choisis de décomposer les actions et donc de passer par un fichier tampon (et temporaire) nommé "liste" il faudra bien que je le lise ensuite par cat ou je me trompe qq-part ?

@ beuguissime
- ta cde ressemble bcp à la ligne non utilisée de mon script (celle qui est commentée)

"^.i *$paquet"

mais toi tu  écris

"^.i.*${saisie}.*"

donc avec un . après le "i" au lieu d'un espace dans ma commande. Quelle est la différence car j'avoue que je suis loin de maîtriser ces regex.

- Je pense qu'en allant un peu vite tu as écris ${saisie} au lieu de ${paquet}

- Enfin pourquoi faut-il rajouter .* après }

Dernière modification par cristobal78 (Le 09/12/2020, à 10:58)


Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE

Hors ligne

#6 Le 09/12/2020, à 12:14

beuguissime

Re : (résolu) voir rapidement si un paquet est installé ou non

Salut,

Exact, j'ai confondu les noms de variable. C'est bien $paquet que j'aurais du mettre. Je corrige mon message. Et mea culpa, j'ai royalement ignoré la ligne commentée. Désolé.

Ma proposition est très permissive (plus que la tienne) :

grep -E "^.i.*${paquet}.*"

retournera quelque chose si la chaîne contenue dans $paquet se trouve n'importe où dans une ligne retournée par dpkg.
Ton grep ne retournera quelque chose que si la chaîne contenue dans la variable paquet se trouve à N (N > ou = à 0) espaces du deuxième caractère de la ligne qui doit être un i.

Si le nom du paquet n'est que vaguement connu, ma proposition marchera mieux. Exemple avec le paquet adobe-flashplugin dans le cas où on se souvient seulement qu'il se nomme flash-quelquechose :

$ dpkg-query -l | grep -E "^.i.*flash"
ii  adobe-flashplugin                                           1:20201013.1-0ubuntu0.20.04.1              amd64        Adobe Flash Player plugin

vs

$ dpkg-query -l | grep -E "^.i *flash"

Pour ce qui est des accolades, tu peux toujours entourer le nom d'une variable par des accolades et tu DOIS le faire s'il y a un risque de confusion ou si tu veux manipuler la chaîne. Par exemple,

$ var="version"
$ echo "$var"
version
$ echo "$var1"

$ echo "${var}1"
version1
$ echo "$var-1"
version-1

Ici, var1 est compris comme la variable nommée var1 car tu peux définir une variable avec un tel nom. Or cette variable n'a jamais été définie. En écrivant ${var}1, on indique au shell que l'on veut la chaîne dans la variable var à laquelle on concatène le caractère 1. var-1 n'étant pas un nom de variable autorisé, il n'y a pas d’ambiguïté possible.

Je préfère mettre toujours les accolades. Certains hérétiques wink du forum ne seront pas d'accord avec moi.

Quant à la remarque de nany, au-delà de la blague que je n'avais pas notée big_smile, elle voulait te faire remarquer que tu peux grepper directement le fichier sans faire un cat d'abord.

Hors ligne

#7 Le 09/12/2020, à 12:50

cristobal78

Re : (résolu) voir rapidement si un paquet est installé ou non

@ beuguissime

merci pour ces explications claires et détaillées.
Je vais donc commencer par les tester toutes pour être sur de bien comprendre.


Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE

Hors ligne

#8 Le 09/12/2020, à 12:56

beuguissime

Re : (résolu) voir rapidement si un paquet est installé ou non

J'ai oublié de traiter une de tes questions.

- Enfin pourquoi faut-il rajouter .* après }

Ça n'est pas nécessaire ici. Tu peux donc l'enlever de la regex que je propose.

Hors ligne

#9 Le 09/12/2020, à 18:59

cristobal78

Re : (résolu) voir rapidement si un paquet est installé ou non

Ok donc la bonne formule c'est :

 dpkg-query -l | grep -E "^.i.*${paquet}*"

qui, si j'ai tout compris, veut dire :
avec grep on extrait les lignes qui ont un "i" en 2-ème position ( donc ^.i  )
suivies de blancs en qté quelconque
suivie de n'importe quel caractères ( donc  *  )
puis des caractères de "paquet" ( donc ${paquet}   )
puis de n'importe quoi d'autre ( donc  *  )

Si c'est bien ça je passe en résolu. smile


Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE

Hors ligne

#10 Le 09/12/2020, à 19:10

Watael

Re : (résolu) voir rapidement si un paquet est installé ou non

puis de n'importe quoi d'autre ( donc  *  )

non. ça indique "zéro ou plusieurs fois le dernier caractère de $paquet"


Connected \o/
Welcome to sHell. · eval is evil.

En ligne

#11 Le 09/12/2020, à 20:38

nany

Re : (résolu) voir rapidement si un paquet est installé ou non

cristobal78 a écrit :

@ nany
[…]
Je n'ai pas compris l'allusion" aux chats (ou alors "cat" ?)

cat est inutile dans ton exemple puisque grep sait lire des fichiers.

grep "expression" fichier

vaut mille fois mieux que

cat fichier | grep "expression"

En ligne

#12 Le 09/12/2020, à 22:00

beuguissime

Re : (résolu) voir rapidement si un paquet est installé ou non

cristobal78 a écrit :

Ok donc la bonne formule c'est :

 dpkg-query -l | grep -E "^.i.*${paquet}*"

qui, si j'ai tout compris, veut dire :
avec grep on extrait les lignes qui ont un "i" en 2-ème position ( donc ^.i  )
suivies de blancs en qté quelconque
suivie de n'importe quel caractères ( donc  *  )
puis des caractères de "paquet" ( donc ${paquet}   )
puis de n'importe quoi d'autre ( donc  *  )

Si c'est bien ça je passe en résolu. smile

Presque.

Watael a corrigé pour l'astérisque de fin. Il y a une petite erreur sur l'interprétation du début :

"^.i.*" se comprend comme
1er caractère quelconque
2ème caractère est un i
suivi de '0 ou plus' caractères quelconques

Attention à ne pas confondre les regex de grep/sed/perl/etc et le globbing/l'expansion du shell. Pour le bash, le caractère * est un joker qui remplace n'importe quoi ; pas besoin d'écrire '.*'. Pour les regex de grep, le caractère '*' est un multiplicateur du caractère précédant ; 'r*' se comprend comme 0 ou plus répétition de la lettre r.

Hors ligne

#13 Le 10/12/2020, à 00:43

cristobal78

Re : (résolu) voir rapidement si un paquet est installé ou non

Merci à vous tous avec une mention particulière pour nany l'ailurophile tongue
Ce petit sujet aura permis d'éclairer plusieurs points intéressants.
je passe en résolu.


Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE

Hors ligne