Mostrando todas las páginas de los programas de los programas -- bash campo con console campo con posix camp codereview Relacionados El problema

Showing all programs' man pages


3
vote

problema

Español

Estoy tratando de Descubra herramientas de línea de comandos útiles en Arch Linux, y parece que una buena forma de hacerlo es mirar a través de todos los 998877766655443314 Páginas relacionadas con los programas (es decir, Sección 1 , como en Noise5 ) en orden alfabético local (es decir, no anulando la configuración regional de clasificación con Noise6 o similar). Este es el más simple (en términos de número de tokens) que he podido hacer hasta ahora:

  Noise7  

Preguntas:

  1. ¿Hay alguna incompatibilidades POSIX aquí? ¿O cualquier manera sencilla de hacer esto mucho más multiplataforma?
  2. ¿Hay una forma más sencilla de hacer esto? Por ejemplo, ¿hay un interruptor Magic 99887766555443318 para mostrar las páginas que se encuentran en Noise9 , en lugar de imprimir su resumen, o para ordenar la salida?

Se produjo esta pregunta debido a una sugerencia para usar

  class Noise {     private static float _seed; } 0  

Para mostrar todas las páginas class Noise { private static float _seed; } 1 . Primero, esto solo responde

¿Qué página manual quieres?

Con el código de salida 1. En segundo lugar, modificando a class Noise { private static float _seed; } 2 funciona para Algunos ejecutables, pero varias de ellas no tienen Game.Settings.Seed23 páginas. En tercer lugar, esto no necesariamente le da una lista completa de la Sección 1, especialmente en otras distribuciones, donde algunas herramientas solo se instalan en 99887766655443324 o 99887766555443325 .

Original en ingles

I'm trying to discover useful command line tools in Arch Linux, and it seems one good way of going about that is to look through all of the man pages related to programs (that is, section 1, as in man 1 bash) in local alphabetic order (that is, not overriding the sorting locale with LC_COLLATE=C or similar). This is the simplest (in terms of number of tokens) I've been able to do so far:

man $(man -s 1 -k . | cut -d' ' -f 1 | sort | tr '\n' ' ') 

Questions:

  1. Are there any POSIX incompatibilities here? Or any simple way to make this much more cross-platform?
  2. Is there a simpler way to do this? For example, is there a magic man switch to actually show the pages found with -k, rather than printing their summary, or to sort the output?

This question came about because of a suggestion to use

cd /usr/bin man 

to show all the man pages. First, this just responds

What manual page do you want?

with exit code 1. Second, amending to man * works for some executables, but several of them do not have man pages. Third, this doesn't necessarily give a complete list of section 1, especially in other distros where some tools are only installed in /usr/sbin or /bin.

        
 
 

Lista de respuestas

2
 
vote
vote
La mejor respuesta
 

POSIX.1-2008 SOLO MANAJE SOPORTE PARA EL CÓDIGO -k de man1 , por lo que no puede confiar en man OPCIÓN en un sistema compatible con POSIX, Y, de hecho, está ausente en FreeBSD y Dragonfly BSD. Aparte de eso, su comando debe ser razonablemente portátil que salve los siguientes problemas:

Algunas conchas más antiguas no admiten $() para la sustitución de comandos

especialmente C SHELL y el original de Bourne Shell No es compatible con la expansión de los paréntesis de dólares . Use `` en su lugar.

La salida de man -k puede diferir entre los sistemas operativos

En OpenBSD Al menos, no hay espacios que sepan los nombres de comando y los números de la sección entre paréntesis, por lo que probablemente sea mejor delimitar por paréntesis izquierdo. Pero tenga cuidado con los sinónimos de comando que parecen byacc, yacc (1) (minix), que producirán resultados indeseables si no se delimita aún más por coma.

man Solo puede visualizar la primera página manual encontrada

nuevamente en OpenBSD Al menos, el comportamiento predeterminado de man es para mostrar solo la primera página manual encontrada. Desde el manual de man0 :

-a Muestra todas las páginas manuales para una sección y combinación de nombres específicos. Normalmente, solo se muestra la primera página manual encontrada.

NOTA: Esto no es un comportamiento compatible con POSIX.

99887766555443311 Puede buscar el carácter literal <> man2

Tanto man3 y man4 debería, según la especificación POSIX, coincide con cualquier cosa en la base de datos man5 , pero este no es el caso en OpenBSD, Minix y SmartOS.

Tubería a man6 es innecesario

A menos que la variable man7 se ha manipulado, el último comando de la tubería es superfluo.


Soluciones propuestas

OS probado: versiones bastante recientes de Centos, Kali Linux, MANJARO Linux, OpenSuse, Ubuntu, Nixos; OpenBSD, FreeBSD, Libélula; Smardos; Minix

Conchas probadas: man8 , man9 , man020 , 99887776655443321 , 99887766555443322 , man3 , man4

Hay tres formas de buscar páginas de hombre en una sección: 99887776655443325 man6 , -s27 man8 o solo man9 , presentado aproximadamente en el orden de la disminución del soporte de los sistemas OSE . Las distribuciones de Linux parecen preferir la primera forma, y ​​BSDS la segunda. El MANUAL DE CENTOS -s11 MIEMBRA MIEMBROS El -s22 es para la compatibilidad con el sistema V, por lo que es la apuesta más segura.

Una solución general que funciona en todos los Esos probados, excepto FreeBSD y Libélgy:

  -s3  

Una solución específica que funciona en todos los BSD probados:

  -s4  

Solución más simple para un OS específico (OpenBSD):

  -s5  
 

POSIX.1-2008 only mandates support for the -k option of man, so you can't rely on man having any -s option on a POSIX compatible system, and in fact it is absent in both FreeBSD and Dragonfly BSD. That aside, your command should be reasonably portable barring the following issues:

Some older shells do not support $() for command substitution

Most notably C shell and the original Bourne shell do not support dollar-parentheses expansion. Use `` instead.

Output of man -k may differ between operating systems

On OpenBSD at least, there are no spaces separating the command names and the section numbers in parentheses, so it's probably better to delimit by left parenthesis. But beware of command synonyms that look like byacc, yacc (1) (MINIX), which will produce undesirable results if not further delimited by comma.

man may only display the first manual page found

Again on OpenBSD at least, the default behavior of man is to display only the first manual page found. From the man manual:

-a Display all of the manual pages for a specified section and name combination. Normally, only the first manual page found is displayed.

Note: this is not POSIX compliant behavior.

man -k . may actually search for the literal . character

Both man -k . and man -k '' should, according to the POSIX specification, match anything in the man database, but this is not the case in OpenBSD, MINIX and SmartOS.

Piping to tr is unnecessary

Unless the IFS variable has been tampered with, the last command of the pipeline is superfluous.


Proposed solutions

Tested OS: Fairly recent versions of CentOS, Kali Linux, Manjaro Linux, openSUSE, Ubuntu, nixOS; OpenBSD, FreeBSD, Dragonfly; SmartOS; MINIX

Tested shells: sh, csh, tcsh, ksh, bash, dash, zsh

There are three ways to search for man pages in a section: man -ssection, man -Ssection or just mansection, presented roughly in the order of decreasing support by the OSes. Linux distros seem to prefer the first way, and BSDs the second. The CentOS man manual also mentions the -s option is for compatibility with System V, so it is the safest bet.

A general solution that works in all tested OSes except FreeBSD and Dragonfly:

man -a -s 1 `man -s 1 -k '(' | awk -F '[,(]' '{print $1}' | sort` 

A targeted solution that works in all tested BSDs:

man -a -S 1 `man -k sec~^1$ | awk -F '[,(]' '{print $1}' | sort` 

Simplest solution for a specific OS (OpenBSD):

man -a -k sec~^1$ ; # May contain duplicates 
 
 

Relacionados problema

2  TtyName () implementado en Go  ( Ttyname implemented in go ) 
Estoy reescribiendo a los coreils de GNU en ir para aprender, vaya mejor. He implementado ttyname (3) , y estoy buscando una crítica general. No puedo pensar...

3  Lote Agregue usuarios a SiguienteCloud en Docker con CSV  ( Batch add users to nextcloud on docker with csv ) 
Tengo un script de trabajo que lote agregará a los usuarios a una instancia de SiguienteCloud ejecutándose en la parte superior de Docker. Esta versión es el ...

1  MultiPhReed MJPG Network Stream Server  ( Multithreaded mjpg network stream server ) 
Soy un poco de neófito cuando se trata de C ++, y así me gustaría algún comentario sobre un proyecto reciente. El código se sienta en un PI de frambuesa y t...

3  ¿Está montado el dispositivo? Tanto los nombres de UUID como los dispositivos aceptados  ( Is device mounted both uuid and device names accepted ) 
Estoy tratando de escribir is_device_mounted Script, que a su vez cumplirá un mayor propósito en el sistema de My Home Linux. Ni siquiera tiene una funció...

7  Cálculo del permiso de archivo octal basado en Linux  ( Calculating linux based octal file permission ) 
Estoy solicitando una posición de devloper de nivel medio. Para avanzar a la 2ª entrevista, debe pasar una prueba técnica. Una de las preguntas fue escribir...

1  Código de Bash para hacer una copia de seguridad del archivo Historial en Linux [CERRADO]  ( Bash code to backup the history file in linux ) 
cerrado. Esta pregunta es off-topic . Actualmente no está aceptando respuestas. ¿Quieres ...

3  Lightshot Print Screen Key Linux Handler  ( Lightshot print screen key linux handler ) 
No he encontrado ninguna Lightshot Pantalla de impresión Linux Handler disponible públicamente. Entonces, decidí escribir uno hoy. Es un script estándar d...

2  Edición de archivos del sistema en Linux (como root) con editores de texto GUI y CLI  ( Editing system files in linux as root with gui and cli text editors ) 
Mi intención es Posix escribir una función generalizada para ejecutar varios editores de texto i Use para diferentes propósitos a través de render8 , es de...

5  Implementación de Semuffore mediante bloqueo de archivos en un script de bash  ( Semaphore implementation by file locking in a bash script ) 
Esta implementación está inspirada en las funciones POSIX sem_wait() y sem_post() . Intenta deshacerse de los bucles ocupados en el código y parece funcion...

3  Función de concha POSIX para hacer preguntas  ( Posix shell function for asking questions ) 
He escrito una pequeña función para hacer preguntas destinadas a mis scripts de shell Posix, donde a menudo necesito una entrada de usuario. La función toma...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos