GNU/Linux >> Tutoriales Linux >  >> Linux

Problema al usar xargs --max-args --replace con delimitador predeterminado

Según la documentación de POSIX, xargs debería ejecutar la utilidad dada con argumentos delimitados por espacios o saltos de línea, y esto es lo que sucede en los dos primeros ejemplos suyos.

Sin embargo, cuando --replace (o -I ), solo las líneas nuevas delimitarán los argumentos. El remedio es dar xargs argumentos en líneas separadas:

$ printf '%s\n' a b c | xargs --max-args=1 --replace="{}" echo x "{}" y
x a y
x b y
x c y

Usando opciones POSIX:

printf '%s\n' a b c | xargs -n 1 -I "{}" echo x "{}" y

Aquí, doy xargs no una línea sino tres. Toma una línea (como máximo) y ejecuta la utilidad con eso como argumento.

Tenga en cuenta también que -n 1 (o --max-args=1 ) en lo anterior no es necesario ya que es el número de reemplazos realizados por -I que determina el número de argumentos utilizados:

$ printf '%s\n' a b c | xargs -I "{}" echo x "{}" y
x a y
x b y
x c y

De hecho, la sección Justificación de la especificación POSIX en xargs dice (énfasis mío)

El -I , -L y -n las opciones son mutuamente excluyentes . Algunas implementaciones usan el último especificado si se proporciona más de uno en una línea de comando; otras implementaciones tratan las combinaciones de las opciones de diferentes maneras.

Mientras probaba esto, noté que la versión de OpenBSD de xargs hará lo siguiente si -n y -I se usan juntos:

$ echo  a b c | xargs -n 1  -I "{}" echo x "{}" y
x a y
x b y
x c y

Esto es diferente de lo que xargs de GNU coreutils hace (que produce x a b c y ). Esto se debe a que la implementación acepta espacios como delimitador de argumento con -n , aunque -I se usa Entonces, no uses -I y -n juntos (no es necesario de todos modos).


Linux
  1. usando awk con condiciones de valor de columna

  2. ¿Usando SDL2 en Linux con g ++?

  3. Eliminar archivos con rm usando find y xargs

  4. Problema con la visualización remota de aplicaciones Java

  5. ¿Cómo rellenar un archivo con FF usando dd?

Uso de Cat Command en Linux con ejemplos

Programar trabajos en Linux con el comando 'at'

Usar colores con printf

Usando sed para dividir una cadena con un delimitador

¿Haciendo que el guardado predeterminado funcione con GRUB2...?

Uso de una lista de usuarios permitidos con VSFTPD