Antworten:
Schreiben Sie einfach {}
zwei Mal in Ihren Befehl. Folgendes würde funktionieren:
$ echo test | xargs -I {} echo {} {}
test test
Ihr Problem ist, wie die Befehle verschachtelt sind . Schauen wir uns das an:
echo test | xargs -I {} echo {} && echo {}
Bash wird ausgeführt echo test | xargs -I {} echo {}
. Wenn es erfolgreich läuft, echo {}
wird ausgeführt. Um die Verschachtelung zu ändern, können Sie Folgendes tun:
echo test | xargs -I {} sh -c "echo {} && echo {}"
Es kann jedoch zu Problemen kommen, da der Ansatz möglicherweise zu Code-Injection neigt. Wenn "test" durch Shell-Code ersetzt wird, wird dieser ausgeführt. Daher sollten Sie die Eingabe wahrscheinlich mit Argumenten an die verschachtelte Shell übergeben.
echo test | xargs -I {} sh -c 'echo "$1" && echo "$1"' sh {}
$(rm -f *)
. Es ist besser zu tunxargs -I {} sh -c 'echo "$1" && echo "$1"' sh {}
Eine andere Option ist die Verwendung des -i
Flags, das dasselbe ist wie -I{}
(dies impliziert, dass die Ersetzung durch gegeben ist {}
):
$ echo test | xargs -i echo {} {}
This option is deprecated; use -I instead.
wurde dem Handbuch hinzugefügt man xargs
.
Bei mir funktioniert nur der Kleinbuchstabe. Ich hatte Hunderte von Bildern in einem Verzeichnis und wollte diese Quellen in eine Liste aufnehmen. Die -I
Option i für Großbuchstaben hat bei mir nicht funktioniert. Nur die Kleinschreibung. Wahrscheinlich aufgrund von Versionsunterschieden. Diese Bilder hatten alle Namen wie Daniel_(somenumber).jpg
.
Diese Syntax hat funktioniert:
ls -l | tr -s ' ' ':'| cut -d: -f9 | xargs -i echo "img src='"{}"'alt='{}'"
Kehrt zurück:
src='Daniel_248.jpg' alt='Daniel_248.jpg'
...
Linux Version 4.14.96-hw + # 80 SMP x86_64 GNU / Linux
var=test & echo $var ...