Wo soll ich Handbuchseiten im Benutzerverzeichnis installieren?

13

Ich versuche, ein Makefile für ein kleines Perl-Dienstprogramm zu erstellen, das ich geschrieben habe, und ich kämpfe darum, herauszufinden, wo meine Manpage installiert werden kann, wenn makesie als Nicht-Root- Benutzer ausgeführt wird.

Ich analysiere gerade die Ausgabe von manpath, um den ersten Pfad im $HOMEVerzeichnis herauszufinden ... und es funktioniert fast einwandfrei.

Pfade, die ich gefunden habe, sind ~/manund~/share/man

Das einzige Problem ist, dass, wenn diese Verzeichnisse gar nicht existieren, manpathkeines davon ausgegeben wird.

Fragen

  • Gibt es eine tragbare Möglichkeit, um herauszufinden, wo ich die Manpages im $ HOME-Verzeichnis des Benutzers installieren soll?
  • Wenn nicht, welches sollte bevorzugt werden?
Romuald Brunet
quelle

Antworten:

13

Sie können die Manpages in dieses Verzeichnis stellen:

$HOME/.local/share/man

Direkter Zugriff

Und dann können Sie direkt darauf zugreifen man:

man $HOME/.local/share/man/manX/manpage.1.gz

$ MANPATH

Sie können $MANPATHmit dem Befehl überprüfen, um was es sich handelt manpath, oder die Umgebungsvariable ausgeben $MANPATH.

Beispiele

$ manpath
manpath: warning: $MANPATH set, ignoring /etc/man_db.conf
/home/saml/apps/perl5/perlbrew/perls/perl-5.14.0/man:/home/saml/.rvm/rubies/ruby-1.9.2-p180/share/man:/home/saml/.rvm/man:/usr/local/share/man:/usr/share/man:/usr/brlcad/share/man:/usr/man:/usr/brlcad/share/man:/usr/brlcad/share/man

$ echo $MANPATH
/home/saml/apps/perl5/perlbrew/perls/perl-5.14.0/man:/home/saml/.rvm/rubies/ruby-1.9.2-p180/share/man:/home/saml/.rvm/man:/usr/local/share/man:/usr/share/man:/usr/brlcad/share/man:/usr/man:/usr/brlcad/share/man:/usr/brlcad/share/man

Sie können dem MANPATH vorübergehend Dinge hinzufügen:

MANPATH=$HOME/.local/share/man:$MANPATH

Wenn Sie dies dauerhaft machen möchten, fügen Sie in Ihrem /etc/profile.d/Verzeichnis eine Datei myman.bashmit dem Namen mit der obigen MANPATH=Zeile hinzu. Dies wird systemweit für alle aufgegriffen. Wenn Sie möchten, dass es nur für Sie ist, fügen Sie es Ihrem $HOME/.bash_profileoder hinzu $HOME/.bashrc.

slm
quelle
2
Um manpathWarnungen vor MANPATHdem Setzen zu unterdrücken , können Sie die -qOption übergeben.
Joseph R.
2
Ja, ich weiß, dass ich sagen kann, manwo ich suchen soll. Ich bin auf der Suche nach einem generischen, portablen Weg für eine generische Installation (dh: Wo ist manauf einer Standardkonfiguration suchen)
Romuald Brunet
Mach ein echo $MANPATHund schau was das zeigt. Dies sind gute Orte, um nachzuschauen oder den manpathBefehl zu verwenden, wie ich in meiner Antwort gezeigt habe.
slm
0

Antwort mit Beschreibung

Ich verwende Cygwin unter Windows 7. Wenn ich es versuche

echo $MANPATH

Ich bekomme nichts Hier ist meine tragbare Methode, um herauszufinden, wo neue manSeiten abgelegt werden sollen .

$ { find / -maxdepth 2 -type d -name "*man*" 3>&2 2>&1 1>&3 | \
grep -v 'Permission denied' >&3; } 3>&2 2>&1

(Eine Notiz zu diesem verrückten Befehl befindet sich am Ende dieser Antwort.)

Sie könnten einfach ersetzen /mit ~. Eine andere Möglichkeit finden Sie im Abschnitt Anderer Hinweis weiter unten.

Auf meinem Computer gab der findBefehl Folgendes zurück:

 /etc/openwsman
 /lib/filemanager-actions
 /lib/gnome-commander
 /lib/help2man
 /lib/window-manager-settings
 /share/man
 /usr/man

Für mich bedeutete das, dass es zwei Möglichkeiten gab: /share/manund /usr/man.

Ich habe mich für die Verwendung entschieden /usr/man, was Sie nicht wollten, aber ich musste noch etwas mehr erforschen.

$ ls -l /usr/man
total 0
drwxr-xr-x+ 1 me Users 0 April 31 17:13 man1

Also, wo ich die neuen manDateien in einem doc/Unterverzeichnis meines Arbeitsverzeichnisses hatte, habe ich verwendet

$ cp -R doc/* /usr/man/man1

Nun konnte ich durch Tippen zu meinem "Handbuch" gelangen

$ man my_new_executable

Wenn Sie keinen wahrscheinlichen Kandidaten sehen, können Sie diesen Teil entfernen oder ändern, z. B. in -maxdepth 3oder 4oder 5, oder wie tief es dauert, um das zu finden, was Sie benötigen. Als ich das tat 3, fand ich zwei andere Kandidaten, /var/cache/manund usr/share/manich hatte bereits eine funktionierende Lösung gefunden, also habe ich mich nicht mit ihnen angelegt.


Noch ein Hinweis

Ich glaube , dass /share/man/man1oder /var/cache/manwürde zu nicht-Root - Benutzer zur Verfügung stehen, wie gewünscht hatte. Bitte korrigieren Sie mich, wenn ich falsch liege.


Die versprochene Note unten

Beachten Sie, dass ich die -maxdepth 2Option mit verwendet habe find, da ich davon ausgegangen bin, dass sich das manVerzeichnis innerhalb von zwei Verzeichnissen des Dateisystemstamms befindet und ich nicht zu viele externe Verzeichnisse abrufen möchte, die irgendwie die Teilzeichenfolge haben man, wie dies /lib/gnome-coman getan hatder .

Das zusätzliche Zeug um das findist da, um Permission deniedFehler zu unterdrücken , falls Sie keinen Zugriff auf suoder haben sudo. Hier ist eine großartige Beschreibung dessen, was passiert. (Suchen Sie nach der Zeile, die mit "gniourf_gniourf" beginnt.)

bballdave025
quelle
0

Ich habe einige Apps installiert, die ich kompiliert habe und in denen die entsprechenden configures für die Installation festgelegt sind ${HOME}/usr/local.

Ich finde jetzt, dass ich Verzeichnisse habe

~/usr/local/share/man/man1
~/usr/local/share/man/man3
~/usr/local/share/man/man5

mit manpages gnuplot.1, gnuplot-ja.1, python3.1, python3.5.1, libpng.3, libpngpf.3, zlib.3, png.5, so dass ich (da meinem Präfix) schätze , dass es für Anwendungen lokal installierten eine ziemlich Standard Lage ist.

Dies ist dann ein Standortkandidat für die Fälle, in denen das lokale manVerzeichnis manuell ausgewählt werden muss .

Natürlich kann man für manSeiten mit beliebigen Pfaden hinzufügen (und sollte es auch im eben genannten Normalfall tun)

export MANPATH="$HOME/usr/local/share/man${MANPATH:+:${MANPATH}}"

(siehe dies ).

sancho.s Setzen Sie Monica wieder ein
quelle