Bearbeiten: Bitte beachten Sie, dass mir, wie unten geschrieben, Antworten auf dieser Site bekannt sind, die erklären, dass apt-get
zur Interpretation von Paketnamen Regex verwendet wird. Tatsächlich geht es bei der Frage direkt darum, inwiefern sich das tatsächliche Verhalten von dem dokumentierten unterscheidet. Bitte lesen Sie die Frage, bevor Sie ein Duplikat vorschlagen.
Einige Antworten auf dieser Site warnen vor der Verwendung apt-get
von Platzhaltern (z. B. Sternchen: *
), da apt-get
diese angeblich als reguläre Ausdrücke erweitert werden, was zu unerwarteten (und unerwünschten) Ergebnissen führen kann, insbesondere mit apt-get remove
. TatsächlichUbuntu- man
Seite fürapt-get
lautet:
Wenn kein Paket mit dem angegebenen Ausdruck übereinstimmt und der Ausdruck eines der Zeichen '.', '?' oder '*' enthält, wird davon ausgegangen, dass es sich um einen POSIX-regulären Ausdruck handelt, und er wird auf alle Paketnamen in der Datenbank angewendet. Alle Übereinstimmungen werden dann installiert (oder entfernt). Beachten Sie, dass die Übereinstimmung nach Teilzeichenfolge erfolgt, sodass 'lo.*' mit 'how-lo' und 'lowest' übereinstimmt. Wenn dies unerwünscht ist, verankern Sie den regulären Ausdruck mit einem '^'- oder '$'-Zeichen oder erstellen Sie einen spezifischeren regulären Ausdruck.
Tatsächlich,diese AntwortAnsprüche:
apt-get akzeptiert als Shell einen regulären Ausdruck und kein Glob-Muster.
Ich glaube, das ist falsch (zumindest seit Xenial). Ich kann beispielsweise das folgende Verhalten reproduzieren:
$ sudo apt-get install -s 'meld*'
[...]
Note, selecting 'meld' for glob 'meld*'
[...]
$ sudo apt-get install -s 'meldt*'
[...]
Note, selecting 'python-meld3' for regex 'meldt*'
Note, selecting 'python3-meld3' for regex 'meldt*'
Note, selecting 'meld' for regex 'meldt*'
[...]
(Ich habe keine Übereinstimmungen entfernt, nur irrelevante Teile der apt-get
Antwort.)
Aufgrund dieses Verhaltens scheint es mir so, dass apt-get
zunächst versucht wird, die angegebenen Ausdrücke als Globs abzugleichen und nur wenn dies fehlschlägt, ein erneuter Versuch als reguläre Ausdrücke durchgeführt wird.
Habe ich das richtig verstanden? Habe ich die man
Seite falsch verstanden oder ist dieses Verhalten schlecht dokumentiert?
Antwort1
Dies wird erläutert in derapt(8)
manpage:
install, remove, purge (apt-get(8))
Performs the requested action on one or more packages specified via
regex(7), glob(7) or exact match. The requested action can be
overridden for specific packages by append a plus (+) to the
package name to install this package or a minus (-) to remove it.
Dieser Absatz existiert nicht in der15.10 manpage, also könnte es in 16.04 hinzugefügt worden sein.
Dies scheint im Änderungsprotokoll von apt nicht erwähnt worden zu sein -der Commit, der dies 2013 hinzugefügt hatzeigt keine Änderungen in den Manpages. Dies wurde kurzzeitig deaktiviert und später wieder aktiviert (sieheCommits zwischen Mai und Februar 2014), UndDie Deaktivierung ist im Changelog aufgeführt..
Dies mag zwar vor vier Jahren hinzugefügt worden sein, abererst 2015 dokumentiert. Und apt-get
die Manpage von bleibt vernachlässigt.