Lecture et search de pages de pages longues

J'ai finalement eu marre quand vous voulez lire sur la lecture de bash et c'est l'option-s avec l' man bash . J'ai trouvé le bon endroit finalement (autour de la ligne 4500), mais c'était frustrant comme d'habitude, puisque les deux /read et même /\ss\s ont beaucoup trop de correspondances.

Donc, la question est la suivante: comment puis-je lire efficacement les pages longues ou get les mêmes informations d'une autre manière, localement ? Comme exemple spécifique, comment accéder à la documentation pertinente après avoir vu read -s pwd dans un script shell? Une bonne réponse pourrait être un extrait de script shell, ou un indice sur un outil et son utilisation, ou quelque chose d'autre entièrement, dans la mesure où cela aide à find le bon endroit pour lire.

Note: Je ne tagte pas avec bash parce que je veux que la question porte sur la lecture des pages de man en général, même si c'est très probablement la page de l'homme le plus souvent rencontrée.

    Pour get rapidement de l'aide sur un Bash embedded, utilisez l' help :

     help read 

    est ce que tu veux.

    Pour une mise en forme de type page, utilisez

     help -m read 

    ou, mieux encore,

     help -m read | less 

    Si vous insistez toujours sur le fait de le searchr dans la page de manuel, je trouve que ce qui m'amène rapidement à l'explication d'une command est

     /^\s*read [[] 

    Cela fonctionne parce que quand une command est expliquée pour la première fois, son nom est légèrement en retrait du début de la ligne. Dans le cas particulier de la read , cela prend un peu de navigation avant d'arriver à la documentation de read car, pour des raisons évidentes, le mot «lire» est répété beaucoup dans la page de manuel. Le [[] signifie correspondre à [qui précède généralement les parameters facultatifs. (Je laisse habituellement / ^ \ s * et je fais simplement / <command embeddede> [[])

    Une autre alternative

    Si le format ne vous dérange pas, vous pouvez convertir votre page man en file DVI ou PDF:

     man -T dvi bash >bash.dvi 

    ou

     man -T ps bash | ps2pdf - bash.pdf # Requires the Ghostscript suite for ps2pdf 

    Bien sûr, étant donné un document DVI ou PDF, vous pouvez alors faire une search de text facilement.

    Approche 1

    man bash puis /read \[ then /-s

    Approche 2

    Vous pouvez essayer un outil open source pour expliquer les arguments de la command line appelés explainers .

    Il peut être utilisé localement. Lisez la documentation sur https://github.com/idank/explainshell

    Avertissements: Fonctionne généralement, mais uniquement avec les commands trouvées dans le référentiel de la page de manuel d'Ubuntu

    Dans votre cas, il ne peut pas reconnaître -s bascule dans read -s pwd .

    Approche 3

    J'ai trouvé un autre outil qui semble prometteur mais cela ne fonctionne pas sur mon système.

    expliquer: Documentation courte pour les commands Unix

    Ce que je fais habituellement dans ce cas est juste exécutez man , searchz l'en-tête SHELL BUILTIN COMMANDS , puis searchz le builtin, c'est-à-dire

     man bash /^SHELL BUILTIN / read 

    cependant, dans bash vous pouvez faire

     help read 

    ou, selon le système, soit de

     man 1 read man bash-builtins 

    En général, j'ai un script appelé he ("aide courte") pour le faire. Vous courriez comme ceci:

     he bash read 

    Il n'y a pas de moyen générique pour find des informations dans une page de manuel, pas plus qu'il n'y a une manière générique de find des informations dans un livre. Cela dépend de ce que vous cherchez.

    Lorsque vous searchz des informations sur un shell embedded, vous pouvez searchr l'enstringment au début d'une ligne pour l'indentation et suivi d'un espace: searchz ^ *read␣ (par exemple tapez /^ *read␣ Enter ) ( est un espace). Cela fonctionne avec dash, pdksh, mksh et bash. La page de manuel de Zsh est divisée, vous devez donc lire la page de manuel de zshbuiltins . Ksh93 a des symboles spéciaux avant les noms de certains builtins, vous devez searchr ^ *†*␣ en UTF-8 ou ^ *-*␣ en ASCII. Il y a quelques faux positifs mais cela vous amènera rapidement à la bonne ligne. La search de ^ *read($| [-[]) réduit la quantité de faux positifs.

    Vous pouvez accélérer la search en disant à votre téléavertisseur où vous voulez aller. Par exemple PAGER='less "+/^ *read \["' man bash ouvre la page bash man sur la description de la read embeddede. Vous pouvez en faire une fonction:

     man-builtin () { PAGER="less '+/^ *$1(\$|\\[|-)'" man ${SHELL##*/} } 

    Juste pour offrir une autre alternative, si vous préférez utiliser un browser Web qui vous permet de parcourir facilement la page en cours, vous pouvez utiliser quelque chose comme man.cgi utilisé sur freeBSD.org qui vous permet également de voir les pages man de différents systèmes pour voir comment ils diffèrent. J'ai vu similaire sur d'autres sites alors attendez-vous qu'il existe d'autres variations autour.

    Le lien d'aide sous apropos offre quelques informations pour get une copy du script à mettre sur votre propre server avec des liens pour download les collections de pages man.

    Je suis arrivé à créer une fonction bash dans ce but. Cet extrait peut être par exemple collé à la fin de ~/.bashrc :

     manfind() { # required args test "$1" -a "$2" || return 1 # create temp file and get its name local tmp=$(mktemp /tmp/manfindXXXXXX) || return 1 ( # subshell for trap trap "rm $tmp" EXIT # grep all matching lines with line numbers and pipe them to dialog if man "$1" | # get the whole man page grep -n "^\s*$2" | # grep for the search ssortingng, with line nums sed 's/:/\n/' | # replace line num separator with newline for dialog cut -c-70 | # cut long lines to nice length xargs -d'\n' -n 999999 \ dialog --output-fd 3 --menu "Select line to go to" 0 0 0 3>$tmp -- 1 '(start of man page)' then # selected line number is now in $tmp, get man page and # use vim in read only mode to view it at right line man "$1" | vim -R +"$(< $tmp)" - else # cancel selected from dialog exit 1 fi ) } 

    Les commentaires expliquent un peu ce qu'il fait. La string de search par défaut en particulier search le mot donné depuis le début des lignes, en sautant l'espace initial. Exemples:

     # find every line which starts with 'read' followed by space manfind bash 'read ' # research bash subshells manfind bash '.*subshell' 

    Note: Ce script n'a pas de concept de sections de page man … Je verrai si je modifierai cela plus tard, mais en MANSECT la variable d'environnement MANSECT de l' homme vous aidera.

    En rassemblant les morceaux de l'autre discussion ici, voici une fonction rapide que vous pouvez laisser dans votre .bashrc qui vous mènera directement à l'embedded (s'il existe). Sinon, il ouvre l' man comme d'habitude:

     man() { case "$(/bin/bash -c 'type -t '"$1")" in builtin) LESS=+?"^ $1 " command -p man bash ;; *) command -p man $@ ;; esac }