#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,
- est ce que ce script répond bien à la question ?
Oui à part que ça renvoie du vide si le paquet n’est pas installé.
- est ce que la ligne ici commentée par # dpkg-query ... donnera exactement le même résultat ?
A priori, oui.
cat liste | grep "$paquet"
Ça tue des bébés chats inutilement.
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.
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 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 , 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.
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
@ 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
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.
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
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