En AIX (pero esto también sucede en HP-UX), tengo GNU ls en mi camino y también tiene el alias ls.
Cuando uso xargs, en su lugar usa el Unix estándar en lslugar del alias.
Por ejemplo ( flocatees una función que encuentra la ruta exacta del tema de búsqueda):
flocate mirrorvg | xargs ls -lh
ls: illegal option -- h
usage: ls [-1ACFHLNRSabcdefgiklmnopqrstuxEUX] [File...]
ls -lh /usr/sbin/mirrorvg
-r-xr-x--- 1 root system 37K apr 3 2014 /usr/sbin/mirrorvg*
¿Por qué los xargs no usan el lsalias?

lsejecutable en su$PATHvariable de entorno, y precede al directorio (probablemente/bin) que contiene ellscomando que no es GNU ? Actualice su pregunta para mostrarnos el valor real de su$PATH.xargsejecutará el primerlscomando que encuentre en un directorio en su$PATH; No sabe sobre alias.Respuestas:
El comando
xargssolo puede ejecutar comandos, no alias. GNU paralela, sin embargo, puede ejecutar funciones:Entonces recomendaría:
Dando a xargs la ruta completa a la versión de ls que desea usar (o un nombre inequívoco, tal vez
glsdependiendo de cómo se instaló en su sistema) o, si su shell lo permite,Definiéndolo
lscomo una función (function ls { gls "$@"; }; export -f lsen bash) y usando GNU paralelo en lugar de xargs (parallel -j1si desea usar una sola CPU).fuente
bashshell. También puede usarxargscon funciones exportadas:ls() { gls "$@"; }; export -f ls; ... | xargs bash -c '"$0" "$@"' lsenv_parallelsi desea usar alias o no quiere exportar la función. Los alias son compatibles en: ash, bash, csh, dash, fish, ksh, mksh, pdksh, tcsh, zsh. Las funciones son compatibles en: bash, fish, ksh, mksh, pdksh, sh, zsh. Incluso funcionan si ejecuta comandos en servidores remotos. gnu.org/software/parallel/env_parallel.htmlLa sustitución del alias es realizada por el shell. Si los intentos de shell de comandos para llamar
foo, y hay un aliasfoo=bar, que es la cáscara que los sustitutos delfooporbaraquí.El shell solo hace esto para los comandos. (De lo contrario, los argumentos que resultan ser los mismos que los de un comando con alias también se reemplazarían). Pero
lsaquí no se ejecuta el shell, sino un argumento paraxargs. Por lo tanto, el shell no lo reemplaza.Luego se
xargsejecutals, pero no conoce los alias, por lo que solo ejecuta el primero que encuentra en la ruta.Los alias son internos al shell y no hay una forma estandarizada para que un programa los lea.
fuente
alias xargs='xargs 'le dirá al shell que expanda los alias despuésxargs.