Convierta "gi" en un script en su lugar
por ejemplo, en /home/$USER/bin/gi
:
#!/bin/sh
exec /bin/grep -i "[email protected]"
no olvide marcar el archivo como ejecutable.
La sugerencia aquí es evitar xargs y usar un bucle "mientras se lee" en lugar de xargs:
find -name \*bar\* | while read file; do gi foo "$file"; done
Consulte la respuesta aceptada en el enlace de arriba para obtener mejoras para tratar con espacios o líneas nuevas en los nombres de archivo.
Los alias son específicos de shell; en este caso, lo más probable es que sean específicos de bash. Para ejecutar un alias, debe ejecutar bash, pero los alias solo se cargan para shells interactivos (más precisamente, .bashrc
solo se leerá para un shell interactivo).
bash-i ejecuta un shell interactivo (y fuentes .bashrc).bash -c cmd ejecuta cmd .
Póngalos juntos:bash -ic cmd ejecuta cmd en un shell interactivo, donde cmd puede ser una función bash/alias definida en su .bashrc
.
find -name \*bar\* | xargs bash -ic gi foo
deberías hacer lo que quieras.
Editar:veo que ha etiquetado la pregunta como "tcsh", por lo que la solución específica de bash no es aplicable. Con tcsh, no necesitas el -i
, ya que parece leer .tcshrc a menos que proporcione -f
.
Prueba esto:
find -name \*bar\* | xargs tcsh -c gi foo
Funcionó para mis pruebas básicas.