/ Los alias de / bash en xargs: "bash -c" no pasa argumentos al comando - linux, bash, xargs

alias bash en xargs: "bash -c" no pasa argumentos al comando - linux, bash, xargs

Para reconocer alias en "xargs", he establecido un alias

alias xargs="xargs bash -ic"

Si ahora ejecuto el siguiente fragmento de código, no se pasan argumentos al comando a xargs.

find . -name pom.xml | xargs grep projectid

De hecho, no se pasan argumentos al comando ni siquiera en este caso.

bash -ic grep projectid pom.xml

La documentación para bash dice

-c Si la opción -c está presente, entoncesLos comandos se leen desde la primera no-opción. argumento command_string. Si hay argumentos después de la cadena de comandos, se asignan a los parámetros posicionales, comenzando con $ 0.

Entonces, ¿qué estoy haciendo mal?

bash --version
GNU bash, version 4.3.39(2)-release (x86_64-unknown-cygwin)

ACTUALIZAR:
Gracias a @knittl por sus aportaciones. Una solución de trabajo por ahora para evitar todas las puntuaciones adicionales en la respuesta de @knittl.
1. Descargar xargs_bash_alias.sh
2. Establecer un alias

alias xargs="<path>/xargs_bash_alias.sh"

Ahora sus comandos xargs reconocerían sus otros alias de bash.

Respuestas

1 para la respuesta № 1

Hay dos cosas que debes tener en cuenta. En primer lugar, citar correctamente:

find . -name pom.xml -print0 | xargs -0 bash -c "grep projectid"

Segundo, necesitas pasar tus argumentos posicionales de alguna manera:

find . -name pom.xml -print0 | xargs -0 bash -c "grep projectid "$@"" -

Utilizar - como primer argumento para golpear, entonces los argumentos posicionales comienzan en $1, al igual que en un shellscript normal.

"$@" se expande a los argumentos posicionales citados a partir de 1. Dado que xargs pasa varios argumentos a la vez, debe usar "$@" (¡citado!) dentro de su script de bash o ejecute xargs con el -n1 opción.