Question

Je veux comprendre l'utilisation de xargs man dans Code de raiponce :

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

Merci à RAMPION: on n'a pas besoin de chat

Pourquoi avons-nous besoin xargs dans la commande?

Je comprends la -partie de xargs comme suit

  1. rien de chat à xargs
  2. xargs fait une liste de l'homme -commandes

J'ai eu une idée qui xargs fait une liste de commandes. Par exemple,

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

est la même que la liste des commandes:

find fileA AND grep masi in it 
find fileB AND grep masi in it 
           and so on for fileC, fileD, ...
Était-ce utile?

La solution

Non, je ne cat rien. Je chat tout entrée je reçois quand je lance la commande. cat est en fait ici étrangère, donc nous allons l'ignorer.

xargs man attend l'entrée utilisateur. Ce qui est nécessaire. Etant donné que dans le script que vous empoigné que de, je ne peux pas coller dans l'argument pour l'homme jusqu'à ce que je crée la fenêtre. Ainsi, la commande qui fonctionne dans la fenêtre doit attendre pour moi de lui donner quelque chose, avant qu'il ne tente d'exécuter l'homme.

Si nous avons manqué screen /bin/sh -d 'man || read', il serait toujours porter plainte « Quelle page de manuel que vous voulez? » puisque nous ne dit que ce.

Autres conseils

xargs arguments de stdin rassemble et exécute la commande donnée avec ces arguments.

chat attend quelque chose à taper, puis xargs est en cours d'exécution homme avec cette entrée.

xargs est utile si vous avez beaucoup de fichiers à traiter, je l'utilise souvent avec une sortie de découverte. xargs farcir autant d'arguments qu'il le peut sur la ligne de commande.
Il est idéal pour faire quelque chose comme

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

La commande cat ne fonctionne pas rien; il fonctionne sur l'entrée standard, jusqu'à ce qu'il soit dit que l'entrée est terminée. Comme le fait remarquer raiponce, la commande cat n'est pas nécessaire, mais il fonctionne sur son entrée implicite (entrée standard), et non sur rien.

La commande xargs lit la sortie de cat, et des groupes les informations dans les arguments à la commande man spécifié en tant que son argument (uniquement). Quand il atteint une limite (configurable sur la ligne de commande), il exécutera la commande man.

Les offres idiome de find ... -print0 | xargs -0 ... avec des noms de fichiers contenant des caractères maladroits tels que des espaces, des onglets et des sauts de ligne. Les impressions de commande de find chaque nom de fichier suivie d'une NUL ASCII ('\0'); c'est l'un des deux personnages qui ne peuvent pas apparaître dans un simple nom de fichier - l'autre étant « / » (qui apparaît dans les noms de chemin, bien sûr, mais pas dans les noms de fichiers simples). Il n'est pas directement équivalente à la séquence que vous fournissez; collections groupes xargs de noms de fichiers dans une seule liste d'arguments, jusqu'à une limite de taille. Si les noms sont assez courts (ils sont en général), alors il y aura moins d'exécutions de grep que il y a des noms de fichiers.

Note, aussi, le grep imprime uniquement le nom du fichier dans lequel le matériel est trouvé si elle a plus d'un fichier à la recherche - ou si elle prend en charge une option pour qu'il imprime toujours les noms de fichiers et est utilisé l'option: « -H » est une extension GNU grep qui fait cela. La façon portable pour faire en sorte que les noms de fichiers apparaissent toujours à la liste est /dev/null que le premier fichier (si « xargs grep something /dev/null »); il ne faut pas longtemps à la recherche /dev/null.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top