Pregunta

Quiero entender el uso de xargs man en código de Rampion- :

screen -t man /bin/sh -c 'xargs man || read'

Gracias a rampion: no necesitamos gato

¿Por qué necesitamos xargs en el comando?

entiendo la -parte xargs de la siguiente manera

  1. gato nada que xargs
  2. xargs hace una lista de los hombres comandos-

He tenido la idea de que xargs hace una lista de comandos. Por ejemplo,

find . -type f -print0 | xargs -0 grep masi 

es lo mismo que una lista de comandos:

find fileA AND grep masi in it 
find fileB AND grep masi in it 
           and so on for fileC, fileD, ...
¿Fue útil?

Solución

No, no me cat nada. Me gato cualquiera que sea la entrada llego después de ejecutar el comando. cat es realmente extraño aquí, así que vamos a ignorarlo.

xargs man espera la entrada del usuario. Lo cual es necesario. Dado que en el guión agarraste que a partir, no puedo pegar en el argumento para el hombre hasta después de crear la ventana. Por lo que el comando que se ejecuta en la ventana tiene que esperar a que se lo dé algo, antes de que intenta ejecutar el hombre.

Si sólo encontramos screen /bin/sh -d 'man || read', sería siempre se quejan "¿Qué página de manual de lo que quieres?" ya que nunca dijeron que.

Otros consejos

xargs recoge los argumentos de la entrada estándar y ejecuta el comando dado con esos argumentos.

así que el gato está a la espera de algo para ser escrito, y luego xargs está ejecutando hombre con esa entrada.

xargs es útil si usted tiene una gran cantidad de archivos a procesar, a menudo uso con la salida del hallazgo. xargs rellenarán tantos argumentos como pueda a la línea de comandos.
Es muy bueno para hacer algo como

find . -name '*.o' -print | xargs rm

El comando cat no opera en nada; que opera en la entrada estándar, hasta que se le dice que la entrada se terminó. Como señala Rampion-, el comando cat no es necesario aquí, pero está funcionando en su entrada implícita (entrada estándar), no en nada.

El comando xargs lee la salida de cat, y los grupos de la información en argumentos para el comando man especificada como argumento (sólo). Cuando llega a un límite (configurable en la línea de comandos), se ejecutará el comando man.

Los find ... -print0 | xargs -0 ... ofertas modismo con nombres de archivo que contienen caracteres incómodas tales como espacios en blanco, tabuladores y saltos de línea. El comando imprime find cada nombre de archivo seguido de un ASCII NUL ('\0'); este es uno de los dos caracteres que no pueden mostrarse en un nombre de archivo simple - el otro es '/' (que aparece en los nombres de ruta, por supuesto, pero no en los nombres de archivos simples). No es directamente equivalente a la secuencia que usted proporciona; Grupos xargs colecciones de nombres de archivo en una sola lista de argumentos, hasta un límite de tamaño. Si los nombres son lo suficientemente corto (por lo general son), entonces habrá un menor número de ejecuciones de grep que hay nombres de archivo.

Tenga en cuenta, también, la grep sólo imprime el nombre del archivo donde se encuentra el material si tiene más de un archivo para buscar - o si es compatible con una opción para que siempre imprime los nombres de archivo y se utiliza la opción: '-H' es una extensión de GNU a grep que hace esto. La manera portátil para asegurarse de que los nombres de archivo aparecen siempre es hacer una lista /dev/null que el primer archivo (por lo que 'xargs grep something /dev/null'); no se necesita mucho tiempo para buscar /dev/null.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top