Befehl "xargs"

Zweck

Erstellt Parameterlisten und führt Befehle aus.

Syntax

xargs [-p t x ] [-e [EOFString]] [-E EOFString] [-i [ReplaceString]] [-I ReplaceString | -L Zahl | -n Zahl] [ -l [ Anzahl]] [-s Größe] [Befehl [Argument ... ]]

Hinweis: Verwenden Sie zwischen den Flags in Kleinbuchstaben und dem Parameter kein Leerzeichen.

Beschreibung

Die Länge der generierten Befehlszeile ist die Summe aus der Größe des Befehls und jedes Arguments, das als Zeichenfolgen behandelt wird, in Byte, einschließlich eines Nullbyteabschlusszeichens für jede dieser Zeichenfolgen. Der Befehl xargs begrenzt die Länge der Befehlszeile. Wenn die erstellte Befehlszeile ausgeführt wird, dürfen die kombinierten Argument- und Umgebungslisten die mit ARG_MAX festgelegte Anzahl von Byte nicht überschreiten. Wenn Sie bei dieser Vorgabe weder das Flag -n noch das Flag -s angeben, entspricht die Standardlänge der Befehlszeile mindestens dem mit LINE_MAX angegebenen Wert.

Flags

Element Beschreibung
-e[EOF-Zeichenfolge] Veraltetes Flag. Verwenden Sie das Flag -E .

Verwendet den Parameter EOF-Zeichenfolge als logische EOF-Zeichenfolge. Wenn Sie das Flag -e oder -E nicht angeben, wird ein Unterstreichungszeichen (_) als logische EOF-Zeichenfolge verwendet. Wenn Sie den Parameter EOF-Zeichenfolge nicht angeben, ist die Funktion für logische EOF-Zeichenfolgen inaktiviert und Unterstreichungszeichen werden als solche interpretiert. Der Befehl xargs liest aus der Standardeingabe, bis er ein Dateiendezeichen (EOF) oder die angegebene Zeichenfolge findet.

-E EOF-Zeichenfolge Gibt eine logische EOF-Zeichenfolge an, um den Standardunterstrich (_) zu ersetzen Der Befehl xargs liest die Standardeingabe, bis entweder EOF oder die angegebene Zeichenfolge erreicht ist.
-i [ReplaceString] Veraltetes Flag. Verwenden Sie das Flag -I.

Wenn Sie den Parameter Ersetzungszeichenfolge nicht angeben, wird die Zeichenfolge {} verwendet.

Anmerkung: Die Flags -I, i, -L, l und -n schließen sich gegenseitig aus. Das letzte angegebene Flag wird wirksam.

-I ReplaceString (i in Großbuchstaben). Fügt jede Zeile der Standardeingabe als Argument für den Parameter Befehl ein und fügt sie für jedes Vorkommen von ReplaceStringin Argument ein. Ersetzungszeichenfolgen können maximal in 5 Argumenten verwendet werden. Leerzeichen am Anfang jeder Standardeingabezeile werden ignoriert. Jedes Argument kann eine oder mehrere Ersetzungszeichenfolgen enthalten, darf aber nicht länger als 255 Byte sein. Das Flag -I aktiviert auch das Flag -x.

Das Flag -I bedeutet -L1. Deshalb kann jeweils nur eine Standardeingabezeile als Argument verwendet werden. Wenn die ersetzte Zeichenfolge mehrfach im Befehlsparameter vorkommt, wird dieselbe Standardeingabezeile für jedes Vorkommen der ersetzten Zeichenfolge verwendet.

Anmerkung: Die Flags -I, i, -L, l und -n schließen sich gegenseitig aus. Das letzte angegebene Flag wird wirksam.

-l [Anzahl] (Kleines L = l). Veraltetes Flag. Verwenden Sie das Flag -L .

Wenn Sie den Parameter Zahl nicht angeben, wird der Wert 1 verwendet. Das Flag -l aktiviert auch das Flag -x.

Anmerkung Die Flags -I, i, -L, -l und -n schließen sich gegenseitig aus. Das letzte angegebene Flag wird wirksam.

-L Anzahl Führt den Parameter Befehl mit der angegebenen Anzahl nicht leerer Parameterzeilen aus, die aus der Standardeingabe gelesen werden. Der letzte Aufruf des Parameters Befehl kann weniger Parameterzeilen enthalten, wenn weniger als die angegebene Anzahl verbleiben. Eine Zeile endet mit dem ersten Zeilenvorschubzeichen, sofern das letzte Zeichen der Zeile kein Leerezeichen oder Tabulatorzeichen ist. Ein abschließendes Leerzeichen zeigt eine Fortsetzung in der nächsten nicht leeren Zeile an.

Liest die angegebene Zahl von Zeilen aus der Standardeingabe und platziert sie am Ende der Befehlszeile.

Anmerkung Die Flags -I, i, -L, -l und -n schließen sich gegenseitig aus. Das letzte angegebene Flag wird wirksam.

-n Anzahl Führt den Parameter Befehl mit so vielen Standardeingabeargumenten wie möglich bis zu der mit dem Parameter Zahl angegebenen maximalen Anzahl aus.

Liest maximal Zahl Argumente aus der Standardeingabe und platziert sie am Ende der Befehlszeile.

Der Befehl xargs verwendet in den folgenden Fällen weniger Argumente:
  • Die kumulierte Befehlszeilenlänge überschreitet die mit dem Flag -s Größe angegebene Anzahl von Byte.
  • Die letzte Iteration hat einen kleineren Wert als den mit dem Argument Zahl angegebenen Wert, aber es verbleiben mehr als null Argumente.

    Anmerkung Die Flags -I, i, -L, -l und -n schließen sich gegenseitig aus. Das letzte angegebene Flag wird wirksam.

-p Fragt an, ob der Parameter Befehl ausgeführt werden soll. Es zeigt die konstruierte Befehlszeile an, gefolgt von einem?...(Fragezeichen, Auslassungspunkte). Geben Sie eine für die Ländereinstellung spezifische positive Antwort ein, um den Parameter Befehl auszuführen. Jede andere Antwort bewirkt, dass der Befehl xargs diesen Aufruf des Parameters überspringt. Sie werden bei jedem Aufruf gefragt. Das Flag -p aktiviert auch das Flag -t.
-s Größe Legt die maximale Gesamtgröße der generierten Befehlszeile fest. Der Parameter Größe muss eine positive ganze Zahl sein. In den folgenden Fällen werden weniger Argumente verwendet:
  1. Die Gesamtzahl der Argumente überschreitet die mit dem Flag -n angegebene Anzahl.
  2. Die Gesamtzahl der Zeilen überschreitet die mit dem Flag -L oder -l angegebene Anzahl von eilen.
  3. Es wird ein Dateiendezeichen (EOF, End-of-File) gefunden, bevor die mit dem Parameter Größe angegebene Anzahl von Byte erreicht ist.
-T Aktiviert den Tracemodus und meldet die generierte Befehlszeile in der Standardfehlerausgabe vor der Ausführung zurück.
-x Stoppt die Ausführung des Befehls xargs, wenn eine Befehlszeile die mit dem Flag -s Größe angegebene Anzahl von Byte überschreitet. Das Flag -x wird aktiviert, wenn Sie das Flag -I oder -l angeben. Wenn Sie das Flag -i, -I, -l, -L oder -n nicht angeben, muss die Gesamtlänge der Befehlszeile innerhalb der mit dem Flag Größe festgelegten Grenzen liegen.

Exitstatus

Dieser Befehl gibt die folgenden Exitwerte zurück:

Element Beschreibung
0 Alle Aufrufe des Parameters Befehls haben den Exitstatus 0 zurückgegeben.
1-125 Es konnte keine Befehlszeile, die die angegebenen Anforderungen erfüllt, generiert werden, mindestens einer der Aufrufe des Parameters Befehl hat einen Exitstatus ungleich null zurückgegeben oder es ist ein anderer Fehler auftreten.
126 Der Befehl wurde zwar gefunden, konnte aber nicht aufgerufen werden.
127 Der Befehl wurde nicht gefunden.

Wenn eine Befehlszeile, die die angegebenen Anforderungen erfüllt, nicht assembliert werden kann, kann der Befehl nicht aufgerufen werden, ein Aufruf des Befehls wird durch ein Signal beendet oder ein Aufruf des Befehls wird mit dem Exitstatus 255 beendet. Der Befehl xargs schreibt eine Diagnosenachricht und wird beendet, ohne dass weitere Eingaben verarbeitet werden.

Beispiele

  1. Geben Sie Folgendes ein, um einen Befehl für Dateien zu verwenden, deren Namen in einer Datei aufgelistet sind:
    xargs lint -a <cfiles
    Wenn dascfilesenthält den folgenden Text:
    main.c readit.c
    gettoken.c
    putobj.c
    In diesem Fall erstellt der Befehl xargs den folgenden Befehl und führt ihn aus:
    lint -a main.c readit.c gettoken.c putobj.c
    Wenn dascfilesDatei enthält mehr Dateinamen als in einer einzigen Shellbefehlszeile passen (bis zu LINE_MAX), führt der Befehl xargs den Befehl lint mit den passenden Dateinamen aus. Anschließend erstellt einen weiteren lint-Befehl und führt diesen mit den verbleibenden Dateinamen aus. Abhängig von den Namen, die in dercfileskönnen die Befehle wie folgt aussehen:
    lint -a main.c readit.c gettoken.c . . .
    lint -a getisx.c getprp.c getpid.c . . .
    lint -a fltadd.c fltmult.c fltdiv.c . . .
    Diese Befehlsfolge ist nicht vollkommen identisch mit einem Befehl lint, der ein einziges mal mit allen Dateinamen ausgeführt wird. Der Befehl lint überprüft Querverweise zwischen Dateien. In diesem Beispiel kann jedoch nicht zwischen denmain.cundfltadd.coder zwischen zwei Dateien, die in separaten Befehlszeilen aufgelistet sind.

    Aus diesem Grund sollten Sie den Befehl nur ausführen, wenn alle Dateinamen in eine einzige Zeile passen. Dies müssen Sie dem Befehl xargs mit dem Flag -x wie folgt mitteilen:

    xargs  -x  lint -a <cfiles
    Wenn alle Dateinamen in dercfilesDatei nicht in eine Befehlszeile passen, zeigt der Befehl xargs eine Fehlernachricht an.
  2. Geben Sie Folgendes ein, um Befehle zu erstellen, die eine bestimmte Anzahl von Dateinamen enthalten:
    xargs  -t  -n  2 diff <<EOF
    starting chap1 concepts chap2 writing
    chap3
    EOF
    Diese Befehlsfolge erstellt diff-Befehle, die jeweils zwei Dateinamen enthalten (-n 2):
    diff starting chap1
    diff concepts chap2
    diff writing chap3
    Das Flag -t bewirkt, dass der Befehl xargs jeden Befehl vor der Ausführung anzeigt, damit Sie sehen können, was passiert. Der<<EOFundEOFMustererkennungszeichen definieren ein here-Dokument, das den vor der Endzeile eingegebenen Text als Standardeingabe für den Befehl xargs verwendet.
  3. Geben Sie Folgendes ein, um Dateinamen in die Mitte der Befehlszeilen einzufügen:
    ls | xargs  -t  -I  {} mv {} {}.old
    Diese Befehlsfolge benennt alle Dateien im aktuellen Verzeichnis um, indem sie .oldbis zum Ende jedes Namens. Das Flag -I weist den Befehl xargs an, jede Zeile der ls-Verzeichnisliste dort einzufügen, wobei geschweifte Klammern ({}) vorkommen. Wenn das aktuelle Verzeichnis die Dateien enthältchap1,chap2undchap3werden die folgenden Befehle erstellt:
    mv chap1 chap1.old
    mv chap2 chap2.old
    mv chap3 chap3.old
  4. Geben Sie Folgendes ein, um einen Befehl für Dateien auszuführen, die Sie einzeln auswählen:
    ls | xargs  -p  -n  1 ar r lib.a
    Mit dieser Befehlsfolge können Sie Dateien auswählen, die der lib.a Bibliothek.Das Flag -p weist den Befehl xargs an, jeden ar-Befehl, den er erstellt, anzuzeigen und zu fragen, ob Sie ihn ausführen möchten. Typyum den Befehl auszuführen. Drücken Sie irgendeine andere Taste, wenn Sie den Befehl nicht ausführen möchten.

    Es wird eine Ausgabe ähnlich der folgenden angezeigt:

    ar r lib.a chap1 ?...
    ar r lib.a chap2 ?...
    ar r lib.a chap3 ?... 
  5. Geben Sie Folgendes ein, um einen Befehl zu erstellen, der eine bestimmte Anzahl von Argumenten enthält, und diese Argumente in die Mitte einer Befehlszeile einzufügen:
    ls | xargs -n6 | xargs -I{} echo {} - some files in the directory
    Wenn das aktuelle Verzeichnis die Dateien "chap1" bis "chap10" enthält, ist die generiert Ausgabe wie folgt:
    chap1 chap2 chap3 chap4 chap5 chap6 - some files in the directory
    chap7 chap8 chap9 chap10 - some files in the directory

Datei

Element Beschreibung
/usr/bin/xargs Enthält den Befehl xargs.