xargs -I {} var = {} echo $ var && echo $ var Eso le daría: No existe tal archivo o directorio.
Respuestas:
27
Solo escribe {}dos veces en tu comando. Lo siguiente funcionaría:
$ echo test | xargs -I {} echo {} {}
test test
Su problema es cómo se anidan los comandos . Veamos esto:
echo test | xargs -I {} echo {} && echo {}
bash se ejecutará echo test | xargs -I {} echo {}. Si se ejecuta con éxito, echo {}se ejecuta. Para cambiar la anidación, puede hacer algo como esto:
echo test | xargs -I {} sh -c "echo {} && echo {}"
Sin embargo, podría tener problemas porque el enfoque podría ser propenso a la inyección de código. Cuando "prueba" se sustituye con código de shell, se ejecuta. Por lo tanto, probablemente debería pasar la entrada al shell anidado con argumentos.
echo test | xargs -I {} sh -c 'echo "$1" && echo "$1"' sh {}
Tenga en cuenta que obtendrá resultados inesperados en su último código si tiene un callod ágil, literalmente $(rm -f *). Es mejor hacerloxargs -I {} sh -c 'echo "$1" && echo "$1"' sh {}
Kusalananda
@ Kusalananda, gracias. Era consciente del problema pero no podía pensar en una solución simple en ese momento. Integré tu sugerencia en la respuesta.
JojOatXGME
5
Otra opción es usar -iflag, que es lo mismo que -I{}(implica que el reemplazo se da con {}):
Mientras tanto: This option is deprecated; use -I instead.se ha agregado al manual man xargs.
Jonathan Komar
0
Para mí solo funciona la minúscula. Tenía cientos de imágenes en un directorio y quería incluirlas en una lista. La -Iopción mayúscula i no funcionó para mí. Solo las minúsculas. Probablemente debido a diferencias de versión. Todas estas imágenes tenían nombres similares Daniel_(somenumber).jpg.
var=test & echo $var ...
Respuestas:
Solo escribe
{}
dos veces en tu comando. Lo siguiente funcionaría:Su problema es cómo se anidan los comandos . Veamos esto:
bash se ejecutará
echo test | xargs -I {} echo {}
. Si se ejecuta con éxito,echo {}
se ejecuta. Para cambiar la anidación, puede hacer algo como esto:Sin embargo, podría tener problemas porque el enfoque podría ser propenso a la inyección de código. Cuando "prueba" se sustituye con código de shell, se ejecuta. Por lo tanto, probablemente debería pasar la entrada al shell anidado con argumentos.
fuente
$(rm -f *)
. Es mejor hacerloxargs -I {} sh -c 'echo "$1" && echo "$1"' sh {}
Otra opción es usar
-i
flag, que es lo mismo que-I{}
(implica que el reemplazo se da con{}
):fuente
This option is deprecated; use -I instead.
se ha agregado al manualman xargs
.Para mí solo funciona la minúscula. Tenía cientos de imágenes en un directorio y quería incluirlas en una lista. La
-I
opción mayúscula i no funcionó para mí. Solo las minúsculas. Probablemente debido a diferencias de versión. Todas estas imágenes tenían nombres similaresDaniel_(somenumber).jpg
.Esta sintaxis ha funcionado:
Devoluciones:
Linux ver 4.14.96-hw + # 80 SMP x86_64 GNU / Linux
fuente