Verhalten von dpkg -S, wenn das Argument mit einem Schrägstrich beginnt

Verhalten von dpkg -S, wenn das Argument mit einem Schrägstrich beginnt
dpkg -S /usr/share/doc/tasksel-data  # fine  
dpkg -S  usr/share/doc/tasksel-data  # fine  
dpkg -S     /share/doc/tasksel-data  # not found  
dpkg -S      share/doc/tasksel-data  # fine  
dpkg -S        are/doc/tasksel       # fine  

Warum um Himmels Willen schlägt die dritte Zeile oben fehl? Beachten Sie, dass Zeile eins mit einem Schrägstrich ( /) beginnt, also ist das wahrscheinlich nicht das Problem.

Antwort1

Dies ist meines Wissens nicht dokumentiert, aber ein führendes /Argument dpkgbehandelt das Argument als Pfad und nicht als Muster. Mit anderen Worten, wenn Sie es anweisen, nach etwas zu suchen, das mit beginnt /, geht es davon aus, dass es nach einer Datei in einem der installierten Pakete mit diesem suchen sollte.genauWeg.

Sie können dies ganz einfach bestätigen mit

$ dpkg -S nonmatching
dpkg-query: no path found matching pattern *nonmatching*
$ dpkg -S /nonmatching
dpkg-query: no path found matching pattern /nonmatching

Beachten Sie, dass im ersten Fall, wenn kein angegeben wird /, der Fehler anzeigt, dass nach gesucht wurde *nomatching*, während mit nach /dem genauen Pfad gesucht wurde /nonmatching. Beispielsweise wird auch /doctrotz der Existenz von Verzeichnissen wie nicht gefunden /usr/share/doc:

$ dpkg -S /doc
dpkg-query: no path found matching pattern /doc

Obwohl ich in der Manpage keine Erwähnung davon finden kann, habe ich es durch Überprüfung der Quelle bestätigt. Die folgenden Zeilen stammen aus der searchfilesin querycmd.c(dpkg 1.17.13) definierten Funktion.

if (!strchr("*[?/",*thisarg)) {
  varbuf_reset(&vb);
  varbuf_add_char(&vb, '*');
  varbuf_add_str(&vb, thisarg);
  varbuf_add_char(&vb, '*');
  varbuf_end_str(&vb);
  thisarg= vb.buf;
}   

Dadurch wird *das übergebene Argument umschlossen, es sei denn, das Argument beginnt mit einem /. Dies führt dazu, dass alles, was mit beginnt , als absoluter Pfad und alles, was nicht mit beginnt, als zu vergleichendes Muster dpkg-querybehandelt wird ./

verwandte Informationen