Frage yum whatprovides 'Perl (Foo :: Bar)' entspricht mit Apt oder Dpkg?


Dies hängt sicherlich damit zusammen diese Frage, aber ich fühle, dass es sich nicht überschneidet, also gehen wir hier hin. Wie bekomme ich die Funktionalität des folgenden Befehls auf Ubuntu (und / oder Debian als Bonus):

yum whatprovides 'perl(Foo::Bar)'

Natürlich kann ich versuchen, mich darauf zu verlassen, dass das Paket irgendwie in einer Ordnerstruktur endet, die den Namespaces in Perl ähnelt, aber ich suche nach etwas Äquivalent, d. H. Gleich kurz und trivial. Wenn es jedoch unter Ubuntu nicht so kurz funktioniert, kann ich mit einem längeren Pfad arbeiten und meine eigene Funktion erstellen.

Bitte beachten Sie 10.04 oder neuer für diese Frage.


4
2018-02-29 17:57


Ursprung


Was macht perl(Foo::Bar) bedeuten? Ist das ein Perl-Paket? - Ken Kinder
Ich gehe mit ja ... es ist ein Perl-Modul. Er versucht herauszufinden, welches apt-Paket ein bestimmtes Perl-Modul bietet. - RobotHumans
@Ken: Ja ist es. - 0xC0000022L
@maggotbrain: Ich würde es lieben wenn es wäre, denn dann würde die Frage beantwortet werden. Leider ist das Beispiel in der anderen Frage vollständig verschiedene Untermenge des yum Funktionalität und hat überhaupt nichts mit meiner Frage zu tun. Hätte ich nach etwas gefragt, das eine bestimmte Datei nach Pfad liefert, wäre Ihre Annahme jedoch richtig. Gleiches gilt für die verknüpfte SO-Frage - völlig unabhängig. - 0xC0000022L
Beachte das apt-file Gibt das Paket an, das der Datei zugeordnet ist, daher handelt es sich um eine nahe Antwort. Zum Beispiel, wenn Baz.pm wird bereitgestellt von baz-perlDieses Paket erscheint auf der Ausgabe. Ich glaube nicht, dass es einen APT-Befehl gibt, um a zu spezifizieren perl Modul in der Art, wie Sie wollen, obwohl. Sieht aus wie eine Bequemlichkeit zu bequem. Ich denke, diese Frage ist besser geeignet für Unix und Linux. - edwin


Antworten:


Wenn Sie nach einer ähnlichen apt / dpkg-Funktion suchen, weiß ich keine, aber Sie können dies verwenden:

dpkg -S $(cpan -D Net::Cmd | grep pm | awk -F '/' '{print $NF}')
perl-modules: /usr/share/perl/5.14.2/IPC/Cmd.pm
perl-modules: /usr/share/perl/5.14.2/Net/Cmd.pm

Sie können verwenden cpan -D module grundlegende Informationen zu einem Modul finden:

cpan -D Net::Cmd
Going to read '/home/braiam/.cpan/Metadata'
  Database was generated on Fri, 16 Aug 2013 21:53:02 GMT
Net::Cmd
-------------------------------------------------------------------------
    For command based protocols (FTP, SMTP etc)
    S/SH/SHAY/libnet-1.23.tar.gz
    /usr/share/perl/5.14/Net/Cmd.pm
    Installed: 2.29
    CPAN:      2.30  Not up to date
    Graham Barr (GBARR)
    gbarr@pobox.com

Dann parsen Sie den Modulpfad, in meinem Fall war ich faul, Sie können verwenden, was Sie wollen, um dies zu tun:

cpan -D Net::Cmd | grep pm | awk -F '/' '{print $NF}'
Cmd.pm

Verwenden Sie dann die Befehlsersetzung:

dpkg -S $(cpan -D Net::Cmd | grep pm | awk -F '/' '{print $NF}')
perl-modules: /usr/share/perl/5.14.2/IPC/Cmd.pm
perl-modules: /usr/share/perl/5.14.2/Net/Cmd.pm

Hoffnung ist nützlich für dich. Übrigens erfordert dies cpan installiert (was in den meisten Standardinstallationen ist).


4
2017-08-16 22:26



Das ist ziemlich gut, besonders wenn ich es mit kombinieren kann apt-file (die ich auf den meisten meiner Ubuntu-Boxen verwende). Danke und +1. Lassen Sie mich etwas näher darauf eingehen, bevor ich es akzeptiere. - 0xC0000022L
Ich änderte die Art wie es den Namen findet, also dpkg -S wird nicht fehlschlagen, wenn CPAN einen anderen Pfad als den tatsächlichen Pfad angibt. - Braiam