Frage

Ich mag die Verwendung von xargs man in Rampion des Code verstehen :

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

Dank RAMPION: wir brauchen keine Katze

Warum tun wir xargs im Befehl brauchen?

Ich verstehe die xargs -Teil wie folgt

  1. Katze nichts zu xargs
  2. xargs macht eine Liste des Mannes -Befehle

Ich habe eine Idee, die eine Liste von Befehlen xargs macht. Zum Beispiel

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

ist das gleiche wie eine Liste der Befehle:

find fileA AND grep masi in it 
find fileB AND grep masi in it 
           and so on for fileC, fileD, ...
War es hilfreich?

Lösung

Nein, ich nicht nichts cat. Ich Katze was Eingang ich, nachdem ich den Befehl ausführen. cat ist eigentlich fremd hier, also machen wir es ignorieren.

xargs man wartet auf Benutzereingaben. Das ist notwendig. Da in dem Skript, dass von packte, kann ich nicht für den Menschen in dem Argument einfügen, bis, nachdem ich das Fenster erstellen. So ist der Befehl, der im Fenster läuft muss warten, für mich etwas zu geben, bevor sie die Menschen zu führen versucht.

Wenn wir nur screen /bin/sh -d 'man || read' laufen, wäre es immer beschweren „Welche Hand-Seite wollen Sie?“ da wir es nie gesagt.

Andere Tipps

xargs sammelt Argumente von stdin und führt den Befehl mit diesen Argumenten gegeben.

so Katze für etwas wartet eingegeben werden, und dann wird xargs laufender Mann mit diesem Eingang.

xargs ist nützlich, wenn Sie viele Dateien zu verarbeiten haben, ich benutze es oft mit einer Leistung von Fund. xargs werden so viele Argumente wie möglich auf der Kommandozeile stopfen.
Es ist toll, für so etwas wie

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

Der cat Befehl nicht auf nichts funktioniert; es arbeitet auf der Standardeingabe, bis es gesagt wird, dass die Eingabe beendet. Wie Rampion anmerkt, ist der cat Befehl hier nicht notwendig, aber es auf dem impliziten Eingang (Standardeingabe), nicht auf nichts funktioniert.

Der xargs Befehl liest die Ausgabe von cat, und Gruppen, die die Informationen in den Argumente an den man Befehl als (nur) Argument spezifiziert. Wenn es eine Grenze (konfigurierbar auf der Kommandozeile) erreicht hat, wird es den man Befehl ausführen.

Die find ... -print0 | xargs -0 ... Idiom beschäftigt sich mit Dateinamen, die peinliche Zeichen wie Leerzeichen, Tabulatorzeichen und Zeilenumbrüche enthalten. Der find Befehl druckt jeden Dateinamen, gefolgt von einer ASCII-NUL ('\0'); dies ist eine von zwei Zeichen, die nicht in einem einfachen Dateinamen angezeigt werden können - die andere ‚/‘ zu sein (die in Pfadnamen, natürlich erscheint, aber nicht in der einfachen Dateinamen). Es ist nicht direkt entspricht die Sequenz, die Sie zur Verfügung stellen; xargs Gruppen Sammlungen von Dateinamen in eine einzige Argumentliste, bis zu einer Größe zu begrenzen. Wenn die Namen kurz genug sind (sie sind in der Regel), dann wird es weniger Hinrichtungen von grep sein, als es die Dateinamen sind.

Beachten Sie auch, druckt der grep nur die Dateinamen, wo das Material gefunden, wenn es mehr als eine Datei suchen hat - oder wenn es eine Option unterstützt, so dass es die Dateinamen immer druckt und die Option verwendet wird: ‚-H‘ ist eine GNU-Erweiterung zu grep, das dies tut. Die tragbare Art und Weise, um sicherzustellen, dass die Dateinamen immer angezeigt ist /dev/null als erste Datei zur Liste (so ‚xargs grep something /dev/null‘); es dauert nicht lange /dev/null suchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top