web-dev-qa-db-fra.com

La liste d'apt ne fonctionne pas correctement. (Ubuntu 18.04, zsh et bash)

Je ne parviens pas à lister les paquets qui utilisent apt dans Ubuntu 18.04 en utilisant zsh ou bash.

Voici le scénario:

Auparavant, je pouvais lister tous les paquets de mon système avec apt list *, ou un sous-ensemble de ces paquets avec apt list *partial-name*, etc. apt list affichera uniquement les packages si j'écris explicitement leurs noms. c'est-à-dire que si je cherche build-essential et que j'entre apt list build-essen*, il n'y aura pas de sortie listée. Cependant, si j’écris apt list build-essential, il n’affiche plus que le paquet (comme prévu).

Si quelqu'un a des conseils sur la façon de résoudre ce problème, ce serait grandement apprécié, merci!

2
Elliot Wasem

De nombreux shell, comme bash ou zsh, ne transmettent pas simplement l'entrée au programme appelé. Au lieu de cela, plusieurs extensions et substitutions sont effectuées. Pour vous donner une idée, bash effectue huit types d’agrandissements différents .

Par exemple, regardons quelque chose comme ls my_fi*.txt. Avec cette commande, bash ferait ce qu’on appelle une "extension de chemin". S'il existe un fichier nommé my_file.txt dans votre répertoire actuel, le shell étend la commande à ls my_file.txt. Le programme ls ne voit jamais le paramètre my_fi*.txt, il n'obtient que la version développée.

Ainsi, lorsque vous tapez apt list *, le * sera remplacé par une liste de fichiers de votre répertoire actuel. C’est ce que apt list obtiendra en entrée. En gros, vous filtrez la liste de paquets en fonction d’arguments que vous n’avez pas l’intention d’utiliser.

Pour garder bash (je crois que zsh fonctionne de manière similaire), vous pouvez masquer les caractères spéciaux qui "déclenchent" le processus. De cette façon, ils sont transférés à apt list (ou à tout programme que vous appelez) sans aucune modification.

Pour masquer un personnage, vous pouvez mettre une barre oblique inverse devant celui-ci.

apt list \*

ou vous pouvez mettre tout l'argument entre guillemets

apt list '*'

Vous voudrez peut-être noter que la première méthode s'applique à un caractère

apt list my_packa\*

la deuxième méthode s'applique à l'argument entier

apt list "my_packa*"
2
Henning Kockerbeck