
Aus bestimmten Gründen ist die Optionsreihenfolge für den Befehl wichtig. Beispielsweise kann eine unterschiedliche Optionsreihenfolge zu unterschiedlichen Aktionen führen ffmpeg
. Wo also wird xargs
die Option hinzugefügt stdin
?
Zum Beispiel:
$ echo 'output.avi' | xargs ffmpeg -i input.avi -r 24
ist völlig gleichwertig mit:
$ ffmpeg -i inpit.avi -r 24 output.avi
input.avi
aber wenn ich per Pipe von echo
„an“ senden möchte xargs ffmpeg -i -r 24 output.avi
, wie stelle ich die Zeichenfolge von STDIN an eine bestimmte Position ein?
Antwort1
Ich bin nicht ganz sicher, ob ich Ihnen folgen kann, aber wenn Sie fragen, wie Sie steuern können, wo xargs
die Argumente bei der Übergabe platziert werden, können Sie den Schalter verwenden, -I{}
um anzugeben, welches Makro Sie für die Eingabe verwenden möchten, die eingefügt wird xargs
, und dieses Makro dann überall dort einsetzen, wo Sie die Dinge xargs
erweitert haben möchten, an die sie übergeben werden.
NOTIZ:Ich verwende die Notation {}
für mein Makro und füge dieses Makro dann einfach dort ein, wo ich die Argumente erweitert haben möchte.
Beispiel
$ echo hi | xargs -I{} echo {}
hi
$ echo hi | xargs -I{} echo {} {}
hi hi
$ echo hi | xargs -I{} echo {} {} bye
hi hi bye
Auszug aus der Manpage von xargs
-I replace-str
Replace occurrences of replace-str in the initial-arguments with
names read from standard input. Also, unquoted blanks do not
terminate input items; instead the separator is the newline
character. Implies -x and -L 1.